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


Ich plane einige Aufgaben mit Crontab.

Was passiert, wenn mein Computer während der Zeit, in der Cron etwas tun soll, heruntergefahren oder ausgeschaltet wird?

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


73
2017-08-10 16:22


Ursprung


Ich habe versucht, auf der Suche nach anacron Tutorial im Web, konnte aber keine guten finden. Ein Blick in Manpages hat mir auch nicht viel geholfen. Wie kann ich bereits existierende crontab ändern, so dass es in anacron geändert wird? Oder irgendein Tutorial in diesem wird sehr hilfreich sein - seg.server.fault
Ich habe meine Antwort bearbeitet, um einige Beispiele hinzuzufügen. Ich hoffe das hilft! - jeff


Antworten:


Wenn Ihr Computer heruntergefahren wird (oder der Cron-Daemon läuft nicht), werden Cron-Jobs nicht gestartet.

Wenn Sie Jobs haben, die Sie später während des Herunterfahrens des Computers ausführen möchten, verwenden Sie anacron. Standardmäßig installiert, siehe "man anacron", "man anacrontab" oder die Datei / etc / anacrontab für weitere Informationen.

Ubuntu verwendet standardmäßig anacron für Crontab-Einträge in:

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

die verbleibenden crontabs bleiben dem Hauptcron-Daemon überlassen, speziell:

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

ANMERKUNGEN

Anacron selbst läuft nicht als Daemon, sondern setzt Systemstart-Skripte und Cron selbst ein.

Auf der Ubuntu 8.04-Box, die ich mir ansehe, wird /etc/init.d/anacron beim Booten und wieder von Cron jeden Morgen um 07:30 Uhr gestartet.

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

Beispiele

Für einfache "tägliche", "wöchentliche", "monatliche" Jobs, legen Sie eine Kopie oder einen Symlink zum Skript in einem der oben genannten /etc/cron.{daily|weekly|monthly} Verzeichnisse ab. 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, wird er sie beim nächsten Einschalten des Computers ausführen.

Als ein weiteres Beispiel, vorausgesetzt, Sie haben hier ein Skript: /usr/local/sbin/maint.sh

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

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

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

Um den Job stattdessen auf dem 4. laufen zu lassen, wenn der Computer ausgeschaltet ist und den Lauf am 3. "vermisst", würden Sie dies in / etc / anacrontab verwenden (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 besteht darin, zu verhindern, dass Anacron beim Booten sofort abfeuert.


61
2017-08-10 16:26



Standardmäßig verwendet Ubuntu Anacron. - 3dinfluence
danke, 3dinccence - adjusted um anzuzeigen, welche Crontabs von anacron in einem Default Ubuntu Setip behandelt werden. - jeff
Wenn Sie das Skript in /etc/cron.*/ einfügen und keinen eigenen crontab-Eintrag haben, haben Sie kein "." im Dateinamen des Skripts. debian und ubuntu verwenden run-parts, um solche Skripte auszuführen, und standardmäßig werden run-parts Dateien mit a ignorieren. im Dateinamen - dies bedeutet, dass die .dpkg-alten und .dpkg-dist-Versionen von Skripten, die von Upgrades umbenannt werden, nicht ausgeführt werden. Rufen Sie also das Skript oder den Symlink "maint" anstatt "maint.sh" auf. - cas
OpenSUSE verwendet standardmäßig cronie ab 11.2 (momentan Tumbleweed / Leap 42.2). Benutzen anacron, installiere das cronie-anacron Paket. - palswim


Dies hängt davon ab, welchen Cron-Scheduler Sie verwenden. Der Basis-Vanilla-Cron-Daemon führt keine Tasks aus, die aufgrund von Systemausfallzeiten verpasst wurden. Es gibt jedoch andere Cron-Scheduler speziell für diese Situation, die dies für Sie tun werden. Die zwei häufigsten Beispiele sind anacron und fcron.


12
2017-08-10 16:27





Aufgaben, die bei ausgeschaltetem Computer geplant werden, werden nicht ausgeführt, wenn der Computer wieder eingeschaltet wird


5
2017-08-10 16:26





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, die Sie überprüfen können, ist Anacron.


2
2017-08-10 16:27





Kommt wirklich auf den Cron-Deamon an, den du gerade spielst. Vixie-cron wird Cronjobs überspringen, die vergeben wurden. fcron wird verpasste Crons so schnell wie möglich ausführen. IIRC es basiert auch auf vixie-cron, also, wenn das was du suchst, möchtest du vielleicht fcron auschecken.


2
2017-08-10 16:35