我在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如下:
进入主循环:
如果你得到了一个vixie cron(这可能是你正在使用的)的副本,你可以看看源代码。 我猜想你会得到报告偏移量,因为计算中的舍入误差(睡眠至less一分钟)。