Wird cron.daily warten, bis die Jobs abgeschlossen sind, bevor der nächste Job gestartet wird?

2468
commonpike

Auf dieser Seite http://wiki.ci.uchicago.edu/I2U2/WebalizerConfiguration wird vorgeschlagen, die Datei /etc/cron.daily/logrotate umzubenennen, damit sie nach /etc/cron.daily/webalizer erscheint. Webalizer sollte vor dem Start von Logrotate ausgeführt werden.

Ist das wahr ? Wird cron.daily warten, bis die Jobs abgeschlossen sind, bevor der nächste Job gestartet wird?

5

2 Antworten auf die Frage

5
Paul

Die Skripts in cron.dailyund die anderen werden ausgeführt, run-partswenn if anacronnicht installiert ist. Sie können dies in sehen /etc/crontab:

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

run-partsführt jede ausführbare Datei im Verzeichnis aus und wartet, bis die Ausführung abgeschlossen ist, bevor die nächste ausgeführt wird. Hier ist ein Test mit diesen beiden Skripten:

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

Ausgabe:

$ 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 

Dies unterscheidet sich von der Planung jedes Jobs in cron, der sie parallel laufen lässt, wenn sie sich überschneiden.

Gute Arbeit, das zu finden. Nachdem ich meine Antwort gepostet hatte, bekam ich eine Idee, die cron auf unterschiedliche Weise ausführt (`/ etc / crontab` und` cron.daily`). Gut gemacht. VL-80 vor 10 Jahren 0
1
VL-80

Ich habe gerade einen Test-Cron-Job erstellt, der jede Minute ausführt:

#!/bin/bash  echo "123" >> /home/user/test-file  sleep 100  echo "234" >> /home/user/test-file 

Ich sah also Überschneidungen htop. Ich meine, es gab Zeiten, in denen ich zwei Prozesse gleichzeitig laufen sah. 123wurde beim Beginn der Minute 234wiederholt und wurde bei 40 Sekunden der nächsten Minute (wegen sleep 100) wiederholt . Innerhalb von 40 Sekunden bis zum Beginn der nächsten Minute gab es nur einen Vorgang.

Das bedeutet, dass cron Jobs abfeuert und nicht wartet, bis sie fertig sind.

Ich versuche es grafisch darzustellen:

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 

Zumindest gilt dies für Jobs in der /etc/crontabmit vixie-cronfrisch aktualisierten Version von Gentoo.

Wie Paul entdeckt hat, cron.dailyführt das Zeug auf unterschiedliche Weise aus.