我注意到在 Debian 相关系统上,系统级 crontab 脚本/etc/cron.hourly
,/etc/cron.daily
... 正在逐渐退役,取而代之的是 systemd 计时器。例如:
$ cat logrotate
#!/bin/sh
# skip in favour of systemd timer
if [ -d /run/systemd/system ]; then
exit 0
fi
...
我认为一个目标是逐步停用 cron 和 anacron。(见注1)
对我来说,cron 的一个关键用例是用户定义的 crontabs ( crontab -e
),它允许用户安排自己的作业以自己的用户身份运行,而无需系统管理员权限。
systemd,当前或计划中是否有任何功能允许非管理员用户安排重复性任务?
注1:
稍微弱化之前的声明,除了那些说 cron 的坏话和对 systemd 计时器的赞美之外,我没有发现任何特别好的讨论。我没有发现任何证据表明这个方向是由 Linux 发行版之神传授的。但是我确实注意到它是一个旅行方向。因此,此声明仅基于这样的想法,即如果这是一个行进方向并且随着时间的推移,我希望大多数/所有包最终都会以相同的方式进行,并使一个系统(cron)冗余。
用户可以设置systemd 计时器,基本上是通过在其中创建服务和计时器
~/.config/systemd/user
并启用计时器。从用户定义的 cron 作业切换到 systemd 计时器会丢失两个主要功能(好坏取决于具体情况):
与 cron 作业相比,使用 systemd 计时器增加了许多可能性;例如,时间规范比 cron 的更具表现力,并且可以将计时器配置为根据附加要求触发,例如“仅在特定 VPN 启动时”。(当然,所有这些细节也可以写在 cron 作业中......)我还发现 systemd 计时器比 cron 作业更易于管理:很容易看到计时器的状态以及下一次将触发的时间。
在 Debian 中,您看到的模式用于避免重复任务运行两次,一次由 systemd 执行,另一次由 cron 或 anacron 执行(无论出于何种原因)。这并不意味着有停用 cron 或 anacron的一般目标。