在cron中“每两分钟”是什么意思?

我在cron中有两个脚本每两分钟运行一次: */2 – 事情是,它们不合适。 一个运行在1,3,5,7,9分钟等,另一个在0,2,4,6,8。 这不是一个关键的问题,但意味着我有两个状态报告,一个比较另一个陈旧。

cron到底做了什么? 在crontab文件顺序中运行第一个,等待完成后运行第二个?

有什么办法可以在同一时间或尽可能接近?

工作将尽可能接近指定时间,但稍后可能会稍微运行。 正如Chris所build议的那样,最好的办法可能是创build一个小的shell脚本和时间表来代替:

 #!/bin/sh /path/to/job/one & /path/to/job/two & 

在这种情况下,我在后台启动它们,以确保它们都在同时或几乎同时运行,但根据您的系统,您的要求等,您将不得不根据您的需要进行调整。

还要注意的是,在某些系统中,* 2 实际上并不意味着只能被2整除的时间,而是以2为步长再次发生。因此,如果工作时间与工作最初开始时的工作时间相匹配,则可能每运行一次就像你所看到的那样,而不是每一个。 你可以尝试像这样:

 00-58/2 

强制这个工作只在偶数的情况下开始,但是这个工作是否和如何依赖于你的系统,你的cron守护进程的版本等等。为了得到更详细的帮助,你将不得不提供这个信息:)

听起来像你最好的select是把两个脚本合并为一个,以确保它们在几乎相同的时间运行。

除了创build第三个(外部)脚本之外,另一个选项是将两个报表组合成一个命令行并将其放入cron:

 */2 * * * * /path/to/job1 ; /path/to/job2 

不,crontab是由cron定期扫描来更新它的时间表。 crontab每行的时间表被交织成一个全局时间表。 如果你有1,3,5,7,9行和2,4,6,8,10行,你会得到1,2,3,4,5,6,7,8,9, 10。

( 维基百科 )(经典)cron使用的algorithm如下:

  1. 在启动时,在所有帐户持有者的主目录中查找名为.crontab的文件。
  2. 对于find的每个crontab文件,确定将来下次要运行每个命令。
  3. 将这些命令放在Franta-Maly事件列表(IIRC这是一个高效的优先级队列结构)和它们相应的时间和“五场”时间说明符。
  4. 进入主循环:

    1. 检查队列头部的任务条目,计算将来要运行多远。
    2. 睡了那段时间。
    3. 在唤醒之后,在validation了正确的时间之后,用创build它的用户的权限在队列头部(在后台)执行任务。
    4. 确定将来下次运行此命令并将其放回到该时间值的事件列表中。

如果你得到了一个vixie cron(这可能是你正在使用的)的副本,你可以看看源代码。 我猜想你会得到报告偏移量,因为计算中的舍入误差(睡眠至less一分钟)。