systemd 下是否有可靠的方法在所有其他初始化完成后启动 cron?

systemd 下是否有可靠的方法在所有其他初始化完成后启动 cron?

我已经使用 cron 有一段时间了;我觉得我理解其中的一些缺点,以及如何解决这些问题。其中之一缺点是 cron 在启动过程中不知道其他服务的状态;也就是说@reboot,当某个作业所需的服务尚不可用时,它可能会导致 cron 中的设施安排的作业出现问题。我将称之为计划@reboot任务

解决方法解决此问题的方法是在脚本启动sleep之前插入一条命令。@reboot例如,在crontab条目中:

@reboot sleep 15; /path/to/script.sh

AFAIK,这是处理问题的常见做法cron @reboot 问题

据说 systemd 可以取代该@reboot工具,并在初始化/启动期间为用户提供更好的控制。这种改进的“成本”是crontab用单元文件和 systemd 学习曲线替换单行。但由于 cron 服务本身是在 systemd 下启动的(通过/lib/systemd/system/cron.service我的 Raspberry Pi巴斯特OS),似乎 cron 可以以消除计划@reboot任务。好像有点不协调的在 systemd 下,人们需要继续使用sleephack 来解决计划@reboot任务

我仍在研究我的 systemd功绩徽章,但有一个观念,即 cron 应该是其中之一最后的服务已初始化。我这样说是因为如果 cron 是启动时的最终服务命令,然后它遵循这一切依赖关系也应该感到满意,并且sleep我的@rebootcron 工作中的 hack 可以被消除。

在尝试了解如何指示 systemd 在初始化序列结束时或接近结束时启动 cron 时,我发现了一个答案说明cron.service可以作为最后一个过程开始通过插入Type=idle./lib/systemd/system/cron.service要测试这一点,请使用之前和之后单元文件的版本cron.service似乎是一个合理的方法; IE:

  1. 跑步systemd-analyze plot > startup_order_noidle.svg
  2. 添加Type=idlecron.service
  3. 重启
  4. 跑步systemd-analyze plot > startup_order_idle.svg

不幸的是,列出 systemd 下服务的启动顺序似乎是一个深不可测的锻炼。使用systemd-analyzeiaw 这篇文章似乎提供了一个答案,但它并没有像我希望的那样工作 -cron.service并不总是列出。让我解释:

.SVG文件大小巨大,我无法共享它们,但startup_order_noidle.svg没有cron.service在列表中的任何位置显示。奥托,startup_order_idle.svg 做过显示cron.service在下面的行上systemd-logind.service。 IoW,如果没有Type=idle添加,cron.service就不会出现 - 即使它已经启动了。

回顾:在所有其他服务/设备/目标/等启动后,systemd 下是否有可靠的方法来启动 cron?有没有可靠的方法来验证这一点?

答案1

通常,对于单元文件,您需要指定“After=”和“Requires=”标志,因为您通常有一个具体的“要求”,之后需要加载服务。

如果您希望这是最后加载的服务,我建议您采用创建自己的目标的方法,该目标将在当前配置的最后一个目标(multi-user.target 或graphical.target 等)之后加载。 )。

在这种情况下,如果安装了新服务,它们通常会默认为预先配置的目标,例如多用户,因此无论发生什么变化,您的 cron 服务都绝对是最后一个。

巧合的是,您链接的问题包含如何执行此操作的完整描述:https://superuser.com/a/1543365

关于验证启动顺序 - 您可以使用以下命令:

systemctl list-units [-all] [--state=xxx]*

与状态:

  • 不活动(可选)
  • 激活
  • 失败的

作为 cron 服务中预启动 exec 的一部分,用于打印/记录所有尚未启动(或已失败)的服务,如果输出activating为空(或包含您知道应在 cron 之后启动的服务),那么您可以请放心,cron 确实是最后一个启动的。

请注意,这是一种解决方法,因为systemd-analyze plot您声称它在您的用例中不可靠。

* 还提供其他状态:activedeactivatingdeadnot-found。可以在此处找到简要说明以及一些其他来源:https://superuser.com/a/896951

相关内容