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

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

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

目前,我使用 crontab 以指定的时间间隔运行这些脚本。但是,在同一台机器上,我还有自定义的内部 systemd 服务单元文件。我想知道将脚本移至 systemd 服务单元和计时器文件是否更好,或者仅使用带有 Restart 和 RestartSec 指令的 systemd 服务单元文件。

如果我需要重新表述某些内容或者表达不清楚,请告诉我。

具体来说,systemd.service 单元翻译Restart=alwaysRestartSec=300“始终每五分钟运行一次,同时忽略上次运行的退出代码”。然而,还有systemd.timer 单元可以配置为执行相同操作但可能仅使用特定的退出代码(例如成功退出)。

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

谢谢!

答案1

我建议使用进程管理器来完成你的工作。幸运的是,你拥有最好的进程管理器systemd。在我看来,这是语义问题,即使这两种解决方案都适用于你的情况。

  • 使用计时器单元来实现您所谈论的类似 cron 的计划。
  • 使用重新启动语句来指定意外结束的任务的重新启动策略。这意味着您甚至可以为计时器单元定义重新启动策略,以防它们失败。请记住,如果您没有定义大于RestartSec1 的值,重新启动的单元会很快进入失败状态,因为它们很快就会达到延迟超时。

相关内容