web-dev-qa-db-ja.com

cron.dailyは、ジョブが終了するのを待ってから次のジョブを開始しますか?

このページ http://wiki.ci.uchicago.edu/I2U2/WebalizerConfiguration は、/ etc/cron.daily/logrotateの名前を変更して、/ etc/cron.daily/webalizerの後に来るようにすることを提案しています-webalizerはlogrotateが開始する前に実行されます。

本当 ? cron.dailyは、ジョブが終了するのを待ってから次のジョブを開始しますか?

5
commonpike

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でスケジュールすることとは異なります。この場合、ジョブが重複すると並列に実行されます。

5
Paul

毎分実行されるテスト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/crontabvixie-cronのジョブに当てはまります。

Paulが発見したように、cron.dailyの内容は別の方法で実行されます。

1
VL-80