Job Scheduling mit crontab, was passiert, wenn der Computer während dieser Zeit heruntergefahren wird?

85

Ich plane einige Aufgaben mit crontab.

Was passiert, wenn mein Computer während der geplanten Zeit heruntergefahren oder ausgeschaltet wird?

Wird jeder verpasste Cron-Job ausgeführt, nachdem der Computer eingeschaltet wurde, oder werden verpasste Jobs für diesen Tag ignoriert? Wenn verpasste Jobs nicht fortgesetzt werden, gibt es eine Möglichkeit, cron so zu konfigurieren, dass die verpassten Tasks ausgeführt werden, nachdem der Computer wieder eingeschaltet wurde?

seg.server.fault
quelle
3
Ich habe versucht, ein Anacron-Tutorial im Web zu suchen, konnte aber keine guten finden. Das Durchsuchen von Manpages hat mir auch nicht viel geholfen. Wie kann ich bereits vorhandene crontab so ändern, dass es in anacron geändert wird? Oder jedes Tutorial in diesem wird sehr hilfreich sein
seg.server.fault
1
Ich habe meine Antwort so bearbeitet, dass sie einige Beispiele enthält. Ich hoffe das hilft!
Jeff

Antworten:

70

Wenn Ihr Computer heruntergefahren wird (oder der Cron-Daemon ansonsten nicht ausgeführt wird), werden Cron-Jobs nicht gestartet.

Wenn Sie Aufträge haben, die Sie später ausführen möchten, während der Computer heruntergefahren ist, verwenden Sie anacron. Weitere Informationen finden Sie unter "man anacron", "man anacrontab" oder in der Datei / etc / anacrontab.

Ubuntu verwendet standardmäßig Anacron für crontab-Einträge in:

/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

Die verbleibenden crontabs müssen vom Haupt-Cron-Daemon verarbeitet werden.

/etc/crontab
/etc/cron.d
/var/spool/cron

ANMERKUNGEN

Anacron selbst wird nicht als Daemon ausgeführt, sondern benötigt Systemstart-Skripte und cron selbst, um ausgeführt zu werden.

Auf der Ubuntu 8.04-Box, die ich gerade betrachte, wird /etc/init.d/anacron beim Booten ausgeführt und jeden Morgen um 07:30 Uhr erneut von cron.

Die README-Datei unter /usr/share/doc/anacron/README.gz enthält etwas mehr Informationen als in den Manpages enthalten.

Beispiele

Fügen Sie für einfache "tägliche", "wöchentliche", "monatliche" Jobs eine Kopie oder einen Symlink zum Skript in eines der oben genannten Verzeichnisse /etc/cron.{daily|weekly|monthly} ein. Anacron sorgt dafür, dass es täglich / wöchentlich / monatlich ausgeführt wird. Wenn Ihr Computer an dem Tag ausgeschaltet ist, an dem die "wöchentlichen" Skripts normalerweise ausgeführt werden, werden sie beim nächsten Einschalten des Computers ausgeführt.

Angenommen, Sie haben hier ein Skript: /usr/local/sbin/maint.sh

Und wenn Sie es alle drei Tage ausführen möchten, sieht der Standardeintrag in / etc / crontab folgendermaßen aus:

# m h dom mon dow user  command
0 0 */3 * * root /usr/local/sbin/maint.sh

Wenn Ihr Computer am 3. des Monats nicht um 00:00 Uhr eingeschaltet war, wurde der Auftrag erst am 6. ausgeführt.

Damit der Job stattdessen am vierten ausgeführt wird, wenn der Computer ausgeschaltet ist, und der dritte nicht ausgeführt wird, verwenden Sie dies in / etc / anacrontab (vergessen Sie nicht, die Zeile aus / etc / crontab zu entfernen):

# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh

Die "Verzögerung" von "5" oben bedeutet, dass anacron 5 Minuten wartet, bevor es diesen Job ausführt. Die Idee ist zu verhindern, dass Anacron Dinge sofort beim Booten abfeuert.

Jeff
quelle
5
Standardmäßig verwendet Ubuntu Anacron.
3dinfluence
1
danke, 3dincluence - adjustierte antwort, um anzuzeigen, welche crontabs von anacron in einem standard ubuntu setip gehandhabt werden.
Jeff
2
Wenn Sie das Skript in /etc/cron.*/ einfügen, anstatt einen eigenen crontab-Eintrag zu haben, dürfen Sie kein "." im Dateinamen des Skripts. debian und ubuntu verwenden run-parts, um solche Skripte auszuführen, und standardmäßig ignorieren run-parts Dateien mit einem. im Dateinamen - das ist so, dass die .dpkg-alten und .dpkg-dist-Versionen von Skripten, die von Upgrades umbenannt wurden, nicht ausgeführt werden. Rufen Sie daher das Skript oder den Symlink "maint" und nicht "maint.sh" auf.
cas
OpenSUSE verwendet standardmäßig Cronie ab 11.2 (derzeit Tumbleweed / Leap 42.2 ). anacronInstallieren Sie das cronie-anacronPaket , um es zu verwenden .
palswim
13

Dies hängt davon ab, welchen Cron-Scheduler Sie verwenden. Der einfache Vanilla-Cron-Daemon führt keine Aufgaben aus, die aufgrund von Systemausfällen übersehen wurden. Es gibt jedoch andere Cron-Scheduler, die speziell für diese Situation entwickelt wurden und dies für Sie erledigen. Die beiden häufigsten Beispiele sind Anacron und Fcron .

Tyler McHenry
quelle
5

Bei ausgeschaltetem Computer geplante Aufgaben werden beim Wiedereinschalten des Computers nicht ausgeführt

Alan H
quelle
2

Wenn Sie herunterfahren, während die Cron-Jobs ausgeführt werden, wird das System heruntergefahren und die Cron-Jobs werden angehalten (oder nicht ausgeführt).

Eine Alternative, in die Sie einchecken können, ist Anacron.

KPWINC
quelle
2

Kommt wirklich auf den Cron-Deamon an, den du ausführst. Vixie-cron überspringt nur die verpassten Cronjobs. fcron wird verpasste crons ausführen, sobald dies möglich ist. IIRC basiert ebenfalls auf vixie-cron. Wenn Sie also danach suchen, sollten Sie sich fcron ansehen.

gregf
quelle