使用 systemd 服务单元的 Restart & RestartSec 还是使用 systemd 计时器单元更好?

Car*_*ett 5 linux time cron systemd

我有几个定期运行的内部自动化脚本。一个是每五分钟一次,另一个是每分钟一次。它们并不需要实时运行。例如,我不在乎它们是在 12:00、12:05 等还是在 12:03、12:08 等运行,我只需要一个稳定的间隔。

目前,我让 crontab 以指定的时间间隔运行这些脚本。但是,在同一台机器上,我也有自定义的内部 systemd 服务单元文件。我很好奇将我的脚本移动到 systemd 服务单元和计时器文件,或者只使用带有 Restart 和 RestartSec 指令的 systemd 服务单元文件会更好。

如果我需要改写某些内容或者我不清楚,请告诉我。

具体而言,定义systemd.service单位转换Restart=alwaysRestartSec=300是同义为“始终运行每五分钟而忽略了以前的运行的退出代码”。但是,也有systemd.timer 单元可以配置为执行相同的操作,但可能具有特定的退出代码,例如仅成功退出。

我正在寻找两者的优缺点。

谢谢!

xh3*_*4sd 11

我建议使用流程管理器来完成您的工作。幸运的是,您拥有史上最好的流程管理器,systemd. 在我看来,这与语义有关,即使两种解决方案都适用于您的情况。

  • 将计时器单位用于您正在谈论的类似 cron 的计划。
  • 使用 restart 语句指定意外结束的任务的重启策略。这意味着您甚至可以为计时器单元定义重启策略,以防它们失败。请记住,如果您未定义RestartSec大于 1的值,则重新启动单元会迅速进入失败状态,因为它们很快就会达到延迟超时。