我已经从 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 作业将每天运行一次。