![Ubuntu 12.04 如何彻底删除anacron](https://linux22.com/image/1115799/Ubuntu%2012.04%20%E5%A6%82%E4%BD%95%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4anacron.png)
我正在使用 Ubuntu 12.04 进行嵌入式项目。我需要 cron 作业仅在其指定的时间执行,因为时间可能会向前移动(导致错过作业),但应该跳过这些作业。在测试时,即使我将 crontabs 放入 /etc/cron.d,例如将作业安排在 13:15,将系统时间设置为 13:25,作业也会在 ~13:26 执行。我不想执行错过的作业,它们应该被忽略(根据我所做的研究,这是“正常”的 cron 行为)。关于如何删除 anacron 并保留普通的 cron,有什么建议吗?
谢谢。
答案1
卸载 anacron 也会卸载桌面。换句话说,Ubuntu 认为没有 anacron 的系统是服务器。如果这对您来说是个问题,那么您可以尝试从 anacron 二进制文件中删除执行权限:
sudo chmod a-x /usr/sbin/anacron
sudo chmod a-x /etc/init.d/anacron
这是因为 /etc/crontab 通过验证 /usr/sbin/anacron 是否可执行来检查 anacron 是否存在,如果不是,则每日、每周和每月的作业将同步运行。
答案2
我看不出删除 anacron 有什么问题。papukaija 提到的答案也没有包含任何警告。尤其是当时间紧迫时,丢失作业正是你想要的。
包装说明如下:
如果您的系统不是每天 24 小时开机,您应该安装此程序以确保每天执行其他 Debian 软件包的维护工作。
因此只需将其删除即可sudo apt-get remove anacron
(不要使用purge
,以便保留配置文件)
还有一个问题(正如你所注意到的) - cron 看到的时间步长小于三个小时,这是类似这样的结果夏令时并仍然执行错过的工作。
当时钟更改时间少于 3 小时时,例如在夏令时开始和结束时,需要特别注意。如果时间向前移动,那些在跳过的时间内运行的作业将在更改后立即运行。相反,如果时间向后移动时间少于 3 小时,那些属于重复时间的作业将不会重新运行。
超过 3 小时的时钟变化将被视为对时钟的修正,并立即使用新时间
你可能的解决办法是,只有确切的执行时间被影响到的。
只有在特定时间运行的作业(未指定为 @hourly,也未在小时或分钟说明符中使用“*”)会受到影响。使用通配符指定的作业将立即根据新时间运行。
因此,如果你想每 3 小时执行一次某项任务,你可以写如下代码
25 */3 * * * root /path/so/some/file
一种完全不同的方法(如果您希望这些作业最多运行一次)是采用at
。