如何延迟 systemd 单元直到网络准备好?

如何延迟 systemd 单元直到网络准备好?

我已经从 cron 切换到systemd-cron使用我的 Debian 不稳定系统,但现在每天的“cron 作业”经常失败,因为它运行 mixmaster,它从互联网获取数据库,并且如果 cron-daily.timer 在网络启动之前、从挂起唤醒之后被触发到 RAM,mixmaster 无法访问服务器。

Apr 24 11:02:23 run-parts[13608]: /usr/bin/mixmaster-update: Get failed for http://www.noreply.org/echolot/pgp-all.asc (500 Can't connect to www.noreply.org:80)
Apr 24 11:02:23 run-parts[13608]: Downloading of mlist and/or mixring failed (do you need a proxy?). Aborting.
Apr 24 11:02:23 su[13809]: pam_unix(su:session): session closed for user mixmaster
Apr 24 11:02:23 run-parts[13608]: run-parts: /etc/cron.daily/mixmaster exited with return code 22

是否可以将计时器延迟到网络启动并运行为止?

答案1

使用 systemd 计时器代替 cron。

然后在你的系统单元中,你可以指定After=network-online.target and Wants=network-online.target

答案2

使用 systemd 的计时器而不是 cron 可能更值得。然后,您应该能够在单元中指定它所依赖的内容。

https://wiki.archlinux.org/index.php/Systemd#Handling_dependency

答案3

在我的设置cron 作业每分钟运行一次,但如果没有互联网连接,则通过连接测试退出,例如

nc -zw3 github.com 22 || exit 0

当最终建立互联网连接时,anacron 作业将每天运行一次。

相关内容