如何仅在连接到互联网时每 5 秒运行一次脚本

Vit*_*you 3 internet systemd systemd-timer

我有一个更新我的谷歌驱动器的脚本。我制作了一个 systemd 单元来运行这个脚本,以及一个每 10 秒运行一次该单元的计时器,两者都可以工作。但是,当我与互联网断开连接时,即使互联网重新打开,脚本也会失败并且 systemd 停止运行它。有什么办法可以让 systemd 继续运行脚本,或者有没有办法让 systemd 仅在有互联网连接的情况下运行脚本?

这是文件

/etc/systemd/system/grive.service:

[Unit]
Description=Syncronize google drive folder

[Service]
User=my_name
ExecStart=/home/my_name/bin/update-grive
Run Code Online (Sandbox Code Playgroud)

/etc/systemd/system/grive.timer:

[Unit]
Description=Timer for how often to syncronize google drive folder

[Timer]
OnUnitActiveSec=10s
OnBootSec=10s

[Install]
WantedBy=timers.target
Run Code Online (Sandbox Code Playgroud)

/home/my_name/bin/update-grive:

#!/usr/bin/env bash
cd /home/my_name/gdrive
grive
Run Code Online (Sandbox Code Playgroud)

Bru*_*779 5

添加Restart=always到服务单元,这样 systemd 会在服务崩溃时继续提供服务。

附带说明一下,您应该使用OnUnitInactiveSec而不是OnUnitActiveSec.

OnUnitInactiveSec=10s(或 20 秒)将在停止后 10 秒启动服务。这样你就可以确保它不会被调用两次,并可能避免禁止 DOSing google


小智 5

确保将精度设置为秒,如下所示:

AccuracySec=1s
Run Code Online (Sandbox Code Playgroud)

根据文档:

AccuracySec= 指定计时器运行的精度。默认为 1 秒。来源:https ://www.freedesktop.org/software/systemd/man/systemd.timer.html#Description

在您的 .timer 文件中执行此操作。

我已经为此挣扎了很长一段时间。