Cron执行问题
假设我用anacron或crontab -e
设置了一个cron作业。
现在,如果我的机器在cron应该执行预定作业的时刻关闭怎么办?
我的机器开机后会立即执行作业吗? 或者根本不执行?
如果您使用的是cron
,那么如果当时计算机处于关闭状态,则不会执行该作业。
如果您正在使用anacron
进行该作业,则下次打开计算机时将执行该作业。 执行时间需要一些探索。 请注意,来自anacron
的最小时间单位是day,因此您只能设置一个频率为1天或更长时间的anacron
作业。
这是/etc/anacrontab
的示例条目:
1 5 cron.daily run-parts --report /etc/cron.daily
-
初始1表示此作业将每天运行(频率= 1天)
-
5表示在运行此作业之前计算机启动后将延迟5分钟
-
cron.daily
是anacron
的作业标识符,用于标识假脱机目录/var/spool/anacron/
中的特定作业 -
run-parts --report /etc/cron.daily
是要执行的命令。
因此,如果您的计算机在运行作业时已关闭,则anacron
将检查/var/spool/anacron/cron.daily
上次运行的时间戳。 如果它在前一天或更早时间执行,那么anacron
将运行该作业并相应地更新时间戳。
Ubuntu使用anacron
进行每日,每周和每月的工作。 来自/etc/crontab
:
05 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
正如您在每天早上6:05看到的那样,每日工作将从/etc/cron.daily
运行。 如果存在anacron
,它将解析/etc/anacrontab
(并运行run-parts
来执行/etc/cron.daily
下的文件),否则cron
将使用run-parts
直接执行/etc/cron.daily
下的所有文件。
如果此时计算机处于关闭状态,则anacron
将在下次按照/etc/anacrontab
文件中的指示将其打开后运行该作业。
当cron作业通过的时间系统关闭时,cron永远不会开始工作。 工作可以在几分钟内完成。
当系统关闭时,anacron会启动一项工作。 但是anacron只能设置为几天。 没什么小的。
anacron用于桌面,因此Ubuntu具有此活动(桌面预计将被关闭)。 cron主要用于服务器(那些机器往往是永久性的)。
crontab
与任何其他调度程序或任何在计算机关闭时无法工作的东西一样。
cron是一个unix实用程序,它允许任务由cron守护程序定期在后台自动运行。 这些任务通常被称为unix中的cron作业。 Crontab(CRON表)是一个文件,其中包含要在指定时间运行的cron条目的计划。
所以运行cron运行命令
crontab -e
将在默认编辑器中打开cron文件。
添加计划命令的条目
* * * * * command to be executed - - - - - | | | | | | | | | +----- day of week (0 - 6) (Sunday=0) | | | +------- month (1 - 12) | | +--------- day of month (1 - 31) | +----------- hour (0 - 23) +------------- min (0 - 59)
所以现在针对你的问题,假设我有这个cron条目:
30 23 31 5 * apt-get install foo
我想在2015年5月31日23:30安装foo
软件包
那么如果计算机此时关闭会发生什么
简单来说,cron没有被执行,根本就不会被执行
现在假设我有这个cron条目:
30 23 * 5 * apt-get install foo
我想在2015年5月20日23:30的任何一天安装foo
软件包
那么如果计算机此时关闭会发生什么
简单来说,cron没有被执行,但是你仍然有机会在今年的第5个月的任何一天23:30运行。
作为结论
如果PC在必须运行时关闭,cron将不会返回完成,而是在crontab条目中的特定时间执行。