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

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

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

这是文件

/etc/systemd/system/give.service:

[Unit]
Description=Syncronize google drive folder

[Service]
User=my_name
ExecStart=/home/my_name/bin/update-grive

/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

/home/my_name/bin/update-give:

#!/usr/bin/env bash
cd /home/my_name/gdrive
grive

答案1

添加Restart=always到服务单元,这样当服务崩溃时,systemd 将继续启动该服务。

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

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

答案2

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

AccuracySec=1s

根据文档:

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

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

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

答案3

在 下[Service],添加:

Restart=always
RestartSec=10

相关内容