我有一个更新我的谷歌驱动器的脚本。我制作了一个 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