这一页http://wiki.ci.uchicago.edu/I2U2/WebalizerConfiguration 建议重命名 /etc/cron.daily/logrotate 以便它位于 /etc/cron.daily/webalizer 之后 - webalizer 应该在 logrotate 启动之前完成。
是真的吗? cron.daily 会等待作业完成后再开始下一个作业吗?
答案1
如果没有安装,则cron.daily
使用 和其他脚本来执行。您可以在 中看到这一点:run-parts
anacron
/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/crontab
的vixie-cron
。
正如保罗所发现的——事物cron.daily
以不同的方式执行。