![对 cron 和 anacron 之间的关系感到困惑](https://linux22.com/image/1142397/%E5%AF%B9%20cron%20%E5%92%8C%20anacron%20%E4%B9%8B%E9%97%B4%E7%9A%84%E5%85%B3%E7%B3%BB%E6%84%9F%E5%88%B0%E5%9B%B0%E6%83%91.png)
我一直在谷歌上搜索,想找到关于 cron 和 anacron 如何协同工作的一般解释,但徒劳无功。目前,手册页对我来说有点太深奥了。
我感到很困惑,因为我将任务添加到 crontab,并且这样做有效,但是当我从 crontab 中删除它们时,它们仍然在 anacron 下运行。我看到 /etc/cron.daily 中的任务,但我不知道它们是如何到达那里的。cron 一直在我的系统上运行,但 anacron 没有。事实上,我看到 anacron 是由 cron 启动的!
基本上,我希望有一个关于如何添加和删除任务的用户级介绍,因为那些告诉你如何编辑 crontab 的简单 Google 答案显然是不完整的。提供教程链接就好了。
答案1
和cron
都是anacron
守护进程,可以安排重复任务在用户定义的某个时间点执行。
cron
和之间的主要区别anacron
在于,前者假设系统持续运行。如果您的系统处于关闭状态,而您在这段时间内安排了一项作业,则该作业永远不会执行。
另一方面,anacron
它是“不合时宜的”,是为非 24x7 运行的系统设计的。它anacron
使用带时间戳的文件来查找上次执行命令的时间。它还/etc/anacrontab
像 一样维护一个文件cron
。此外,它cron.daily
每天运行 anacron。因此,anacron
每天只能运行一次作业,但cron
可以每分钟运行一次。
从man anacrontab
:
执行时,Anacron 会从配置文件(通常是 /etc/anacrontab,请参阅 anacrontab(5))中读取作业列表。此文件包含 Anacron 控制的作业列表。每个作业条目指定一个以天为单位的时间段、以分钟为单位的延迟、唯一的作业标识符和一个 shell 命令。
对于每个作业,Anacron 都会检查该作业是否在过去 n 天内执行过,其中 n 是该作业指定的时间段。如果没有,Anacron 会在等待延迟参数指定的分钟数后运行该作业的 shell 命令。
命令退出后,Anacron 会将日期记录在该作业的特殊时间戳文件中,以便它知道何时再次执行该作业。仅使用日期进行时间计算。不使用小时。
这意味着,如果计划每天运行一项任务,并且计算机在此期间关闭,则运行 anacron 时,它可以看到该任务上次运行是在 24 小时前,并且正确执行该任务。
例如如果您在中指定以下内容/etc/anacrontab
:
7 15 test.daily /bin/sh /home/username/script.sh
script.sh
并且在作业应该执行的当天,如果系统没有运行,anacron
则会script.sh
在系统恢复后的 15 分钟内执行。
一些参考: