我希望每天都有两个作业按我指定的顺序连续运行。这个crontab能可靠地做我想做的事吗?
@daily job1
@daily job2
我假设他们会一个接一个地运行,但我无法通过搜索网络或从这些手册中的任何一个找到答案:cron(1)
、crontab(1)
、crontab(5)
。
上面的crontab显然不会做我想做的事情,如果cron以并行或不可预测的顺序运行@daily
调度的事情。
我知道我可以简单地制作一个shell脚本来按顺序启动它们,我只是好奇cron应该如何工作(而且我太懒了,不愿意收集测试数据或阅读源代码)。
Cron由cron
包提供。操作系统是Ubuntu10.04LTS(服务器)。
发布于 2011-12-05 16:46:37
在快速浏览源代码(我认为是相同版本的Debian挤压版)之后,它确实看起来就像给定文件中的条目,而且执行的时间也是一样的。为此目的,@daily
和0 0 * * *
是相同的(实际上,@daily
与这个cron中的0 0 * * *
是相同的)。
我不会一刀切地依赖这个。有一天,可能有人会决定cron应该并行运行作业,以利用这些32核CPU,其中有31个内核处于空闲状态。在实现cron源代码中遇到的这个已有20年历史的todo项时,可能会这样做:
所有这些都应该有标记和负载限制;也就是说,不是@时表示"0 ** *“,而是”接近每小时的前端,而不是“直到系统负载降低”(…) (vix,…)。
在这里写@daily job1; job2
很容易。如果作业按照顺序执行是很重要的,那么就让它成为您所写内容的直接结果。
此外,使订单显式消除了未来的管理员会重新排序行的风险,认为这并不重要。
发布于 2011-12-05 15:55:34
http://ss64.com/osx/crontab.html (以及其他参考资料)说@ says相当于
0 0 * * *
上面写着午夜要跑。我预计这两条线路都会在午夜附近发射,但无法保证哪条线路会先发射。我同意in 013‘S在他的评论中的建议:
它被指定不足的事实通常意味着它是由实现决定的,通常最好不要依赖于这种行为。在自己的脚本中放置序列重要的作业序列,而不是作为单独的crontab条目,这样做可能更干净、更有组织。
发布于 2011-12-05 18:01:50
@Giles在导入时使用单个脚本按顺序运行是合适的。
cron.daily
文件不指定运行时间。这是我的经验,他们确实运行的顺序。这是合理的,因为许多后台作业可能运行在笔记本电脑或其他系统上。
指定时间时,将运行当前分钟计划的所有作业。使用不同的时间是个好主意。
如果您的作业是互斥的,则通常使用锁文件来确定其他作业是否正在运行。
https://unix.stackexchange.com/questions/26133
复制相似问题