Ich möchte, dass zwei Jobs jeden Tag in genau der angegebenen Reihenfolge ausgeführt werden. Wird diese Crontab zuverlässig tun, was ich will?
@daily job1
@daily job2
Ich gehe davon aus sie einen nach dem anderen laufen, aber ich war nicht in der Lage , die Antwort zu finden , indem die Web oder von einem dieses manpages suchen: cron(1)
, crontab(1)
, crontab(5)
.
Die obige Crontab macht offensichtlich nicht das, was ich will, wenn Cron Dinge @daily
parallel oder in einer unvorhersehbaren Reihenfolge ausführt.
Ich weiß, dass ich einfach ein Shell-Skript erstellen kann, um sie in der richtigen Reihenfolge auszulösen. Ich bin nur neugierig, wie Cron funktionieren soll (und ich bin zu faul, um Testdaten zu sammeln oder den Quellcode zu lesen).
Cron ist im cron
Lieferumfang enthalten. Betriebssystem ist Ubuntu 10.04 LTS (Server).
cron
Paket enthalten ist? Fast alle Cron-Daemons, die ich kenne, verarbeiten dies in der Reihenfolge und synchron, indem sie normalerweise zuerst jede Datei in alphabetischer Reihenfolge analysieren (obwohl einige dies in aufsteigender Reihenfolge nach der Zeitspanne zwischen den einzelnen Abläufen tun) und dann die darin enthaltenen Jobs in Zeilenreihenfolge.Antworten:
Nach einem kurzen Blick auf den Quellcode (in Debian Squeeze, von dem ich glaube, dass es dieselbe Version ist) sieht es so aus, als ob Einträge in einer bestimmten Datei und zu denselben Zeiten in der angegebenen Reihenfolge ausgeführt werden. Zu diesem Zweck
@daily
und0 0 * * *
sind identisch (in der Tat@daily
ist identisch mit0 0 * * *
in diesem Cron).Darauf würde ich mich nicht auf ganzer Linie verlassen. Es ist möglich, dass eines Tages jemand entscheidet, dass cron Jobs parallel ausführen soll, um die Vorteile dieser 32-Kern-CPUs mit 31 Kernen im Leerlauf zu nutzen. Dies kann geschehen, wenn dieses 20 Jahre alte Aufgabenelement in der Cron-Quelle implementiert wird:
Es ist sehr einfach,
@daily job1; job2
hier zu schreiben . Wenn es wichtig ist, dass die Jobs in der richtigen Reihenfolge ausgeführt werden, führen Sie dies direkt aus.Durch die explizite Angabe der Reihenfolge wird außerdem das Risiko beseitigt, dass ein zukünftiger Administrator die Zeilen neu anordnet, da er denkt, dass dies keine Rolle spielt.
quelle
http://ss64.com/osx/crontab.html (sowie andere Verweise) besagt, dass @daily äquivalent zu ist
die sagt, um Mitternacht zu laufen. Ich würde erwarten, dass zwei Linien dieser Art so kurz wie möglich um Mitternacht gestartet werden, ohne Garantie, welche zuerst laufen würde. Ich stimme dem Vorschlag von jw013 in seinem Kommentar zu:
quelle
@Giles kommentiert die Verwendung eines einzelnen Skripts, wenn es importiert wird, um die Dinge in der richtigen Reihenfolge auszuführen.
cron.daily
Dateien geben keine Laufzeiten an. Es ist meine Erfahrung, dass sie seriell laufen. Dies ist sinnvoll, da viele Hintergrundjobs möglicherweise auf einem Laptop oder einem anderen System ausgeführt werdenWenn Zeiten angegeben werden, werden alle Jobs ausgeführt, die für die aktuelle Minute geplant sind. Es ist eine gute Idee, verschiedene Zeiten zu verwenden.
Wenn Sie Aufträge haben, die sich gegenseitig ausschließen, wird häufig mithilfe einer Sperrdatei festgestellt, ob der andere Auftrag ausgeführt wird.
quelle
@daily
ist etwas anders als/etc/cron.daily
. Ersteres ist eine alternative Syntax für die Verwendung in einer Crontab. Schauen Sie sich auch anrun-parts
. Auf meinem System werdenrun-parts
Programme ausgeführt/etc/cron.daily
. Laut derrun-parts(8)
Manpage werden "Dateien in der lexikalischen Sortierreihenfolge ihrer Namen ausgeführt ...".