このページ http://wiki.ci.uchicago.edu/I2U2/WebalizerConfiguration は、/ etc/cron.daily/logrotateの名前を変更して、/ etc/cron.daily/webalizerの後に来るようにすることを提案しています-webalizerはlogrotateが開始する前に実行されます。
本当 ? cron.dailyは、ジョブが終了するのを待ってから次のジョブを開始しますか?
anacron
がインストールされていない場合、cron.daily
およびその他のスクリプトはrun-parts
を使用して実行されます。これは/etc/crontab
で確認できます。
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
run-parts
は、ディレクトリ内の各実行可能ファイルを実行し、それぞれが完了するのを待ってから次の実行可能ファイルを実行します。これらの2つのスクリプトを使用したテストを次に示します。
$ 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ジョブを作成しました。
#!/bin/bash
echo "123" >> /home/user/test-file
sleep 100
echo "234" >> /home/user/test-file
そのため、htop
で重複が見られました。つまり、2つのプロセスが同時に実行されているのを見た時期があったということです。 123
は分の開始時にエコーされ、234
は次の分の40秒にエコーされました(sleep 100
のため)。次の分の始まりまでの40秒の間に、たった1つのプロセスがありました。
つまり、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
のジョブに当てはまります。
Paulが発見したように、cron.daily
の内容は別の方法で実行されます。