是否按顺序依次处理多个@daily crontab条目?


22

我希望每天有一段时间按照我指定的顺序连续运行两个作业。这个crontab会可靠地执行我想要的吗?

@daily job1
@daily job2

我假设他们运行一个接一个,但我无法通过搜索网页或从这些联机帮助页中找到了答案:cron(1)crontab(1)crontab(5)

如果cron @daily并行或以不可预测的顺序运行计划的事情,则上面的crontab显然不会满足我的要求。

我知道我可以简单地编写一个shell脚本来按顺序将它们解雇,我只是很好奇cron应该如何工作(而且我懒得收集测试数据或阅读源代码)。

Cron由cron包装提供。操作系统是Ubuntu 10.04 LTS(服务器)。


您是否知道cron包裹提供的是哪个cron ?我知道,几乎所有的cron守护程序都将按顺序进行处理,并进行同步处理,通常通常先按字母顺序分析每个文件(尽管有些文件是按两次运行之间的时间间隔递增),然后再按行顺序进行内部作业。
克里斯·

5
规格不足的事实通常意味着它取决于实现,并且通常最好不要依赖于这种行为。将序列的顺序放在自己的脚本中而不是单独的crontab条目中,可能会更干净,组织得更好。
jw013 2011年

@ChrisDown:我想是Vixie Cron。packages.ubuntu.com/lucid/cron
亚当蒙森

1
我建议您是否真的要按顺序运行它们,请在一分钟后执行一次。
凯文

@ jw013和Kevin:同意,但这不是我的问题。
亚当·蒙森,

Answers:


26

快速浏览源代码(在Debian squeeze中,我认为是同一版本),它看起来确实像给定文件中的条目,并且按顺序执行了相同的时间。为了这个目的,@daily并且0 0 * * *是相同的(实际上@daily是相同的0 0 * * *在此的cron)。

我不会全盘依赖它。有一天,某人可能会决定cron应该并行运行作业,以利用具有31个核心空闲的32个核心CPU的优势。当实施cron来源中遇到的这个已有20年历史的待办事项时,可以这样做:

所有这些都应标记并限制负载;即,不是@hourly意思是“ 0 * * * *”,它的意思是“靠近每小时的时间,但是直到系统负载很小时才开始”。(…)(vix,jan90)

@daily job1; job2在这里写很容易。如果按顺序执行作业很重要,请使其直接成为编写内容的结果。

此外,明确显示订单消除了将来的管理员可能会认为无关紧要的重新安排订单行的风险。


5

http://ss64.com/osx/crontab.html(以及其他参考资料)说@daily等效于

0 0 * * *

据说要在午夜运行。我希望两条这样的生产线都尽可能在午夜之前启动,而不能保证哪一条首先运行。我同意jw013在他的评论中的建议:

规格不足的事实通常意味着它取决于实现,并且通常最好不要依赖于这种行为。将一个序列的作业放在其自己的脚本中而不是作为单独的crontab条目,可能更干净,组织得更好。


这会有所帮助,谢谢。我同意@ jw013的建议有效,但这不是我问的问题。我猜我将不得不向实际来源咨询最终答案,因为这可能确实是特定于实现的。
亚当·蒙森,

0

@Giles评论在导入单个脚本以按顺序运行事物时使用它是适当的。

cron.daily文件未指定运行时间。根据我的经验,它们确实可以连续运行。尽可能在笔记本电脑或其他系统上运行的后台作业是有道理的

指定时间后,将运行为当前分钟安排的所有作业。使用不同的时间是个好主意。

如果您有相互排斥的作业,通常使用锁定文件来确定其他作业是否正在运行。


@daily与略有不同/etc/cron.daily。前者是在crontab中使用的替代语法。也看看run-parts。我的系统用来run-parts在中运行程序/etc/cron.daily。根据run-parts(8)联机帮助页,“文件以其名称的词法排序顺序运行...”。
亚当·蒙森,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.