cron.daily 会等待作业完成后再开始下一个作业吗?

cron.daily 会等待作业完成后再开始下一个作业吗?

这一页http://wiki.ci.uchicago.edu/I2U2/WebalizerConfiguration 建议重命名 /etc/cron.daily/logrotate 以便它位于 /etc/cron.daily/webalizer 之后 - webalizer 应该在 logrotate 启动之前完成。

是真的吗? cron.daily 会等待作业完成后再开始下一个作业吗?

答案1

如果没有安装,则cron.daily使用 和其他脚本来执行。您可以在 中看到这一点:run-partsanacron/etc/crontab

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

run-parts将执行目录中的每个可执行文件,并等待每个可执行文件完成后再运行下一个。以下是使用这两个脚本的测试:

$ cat cron/1test
#!/bin/bash
date
echo script1
sleep 10
date


$ cat cron/2test
#!/bin/bash
date
echo script2
sleep 10
date

输出:

$ run-parts --verbose cron
run-parts: executing cron/1test
Monday 6 January  10:38:42 EST 2014
script1
Monday 6 January  10:38:52 EST 2014
run-parts: executing cron/2test
Monday 6 January  10:38:52 EST 2014
script2
Monday 6 January  10:39:02 EST 2014

这与在 cron 中安排每个作业不同,如果它们重叠,cron 将并行运行它们。

答案2

我刚刚创建了每分钟执行一次的测试 cron 作业:

#!/bin/bash

echo "123" >> /home/user/test-file

sleep 100

echo "234" >> /home/user/test-file

所以我确实看到了重叠htop。我的意思是,有一段时间我看到两个进程同时运行。123在分钟开始时回显,并234在下一分钟的 40 秒回显(因为sleep 100)。在 40 秒到下一分钟开始的时间段内只有一个进程。

这意味着 cron 触发作业但不等待它们完成。

我将尝试以图形方式表示它:

0 minute 00 seconds 123 <----first execution
1 minute 00 seconds 123 <----second execution
1 minute 40 seconds 234 <----first execution
2 minute 00 seconds 123 <----third execution
2 minute 40 seconds 234 <----second execution
3 minute 00 seconds 123 <----fourth execution
3 minute 40 seconds 234 <----third execution

至少对于刚刚更新的 Gentoo 上的工作来说,这是正确/etc/crontabvixie-cron

正如保罗所发现的——事物cron.daily以不同的方式执行。

相关内容