Cron执行问题

Cron执行问题

假设我使用 anacron 或者使用 设置了一个 cron 作业crontab -e

现在,如果我的机器在 cron 应该执行计划作业的时候关闭了,该怎么办?

我的机器一开机,作业就会执行吗?还是根本不会执行?

答案1

当 cron 作业的时间已到时,cron 永远不会在系统关闭时启动作业。作业可以在几分钟内执行。

anacron 确实会在系统关闭时启动一项任务。但 anacron 只能设置为几天。不能设置得更小。

anacron 用于桌面,因此 Ubuntu 已将其激活(桌面预计会定期关闭)。cron 主要用于服务器(这些机器往往一直处于开启状态)。

答案2

如果您正在使用cron,则当计算机当时关闭时,该作业将不会被执行。

如果您正在使用anacron该作业,它将在下次打开计算机时执行。执行时间需要一些解释。请注意,最小的时间单位是anacron天,因此您只能设置anacron运行频率为 1 天或更长时间的作业。

以下是 的示例条目/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),否则cronrun-parts直接执行 下的所有文件/etc/cron.daily

如果计算机当时处于关闭状态,anacron则将根据文件中的说明在下次打开计算机后运行该作业/etc/anacrontab

答案3

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

这个我想foo在 2015-5-31 23:30 安装包

那么如果此时电脑关闭会发生什么

简单来说,cron 不会被执行,也永远不会被执行

现在假设我有这个 cron 条目:

30 23 * 5 * apt-get install foo

我想foo在 2015 年 5 月的任何一天的 23:30 安装该包

那么如果此时电脑关闭会发生什么

简单来说,cron 没有执行,但您仍然有机会在今年第 5 个月的任何一天的 23:30 运行。

作为结论

如果在需要运行时 PC 已关闭,则 cron 不会直接返回完成状态,而是会在 crontab 条目中的特定时间执行。

相关内容