Verwirrt über die Beziehung zwischen Cron und Anacron

19

Ich habe vergeblich gegoogelt, um eine allgemeine Erklärung dafür zu finden, wie Cron und Anacron zusammenarbeiten. Die Manpages sind mir zu diesem Zeitpunkt ein bisschen zu tief.

Ich bin verwirrt, weil ich Tasks zu crontab hinzufüge, und das funktioniert, aber wenn ich sie aus crontab lösche, laufen sie immer noch unter Anacron. Ich sehe die Aufgaben in /etc/cron.daily, bin mir aber nicht sicher, wie sie dahin gekommen sind. Auf meinem System läuft immer cron, aber nicht anacron. In der Tat sehe ich, Anacron wird von Cron gestartet!

Grundsätzlich hätte ich gerne eine Einführung auf Benutzerebene zum Hinzufügen und Entfernen von Aufgaben, da die leicht lesbaren Antworten, die Sie auffordern, Crontab zu bearbeiten, nicht vollständig sind. Ein Link zu einem Tutorial wäre in Ordnung.

Bio-Marmor
quelle

Antworten:

19

Beide cronund anacronsind Daemons, die die Ausführung wiederkehrender Aufgaben zu einem vom Benutzer festgelegten Zeitpunkt planen können.

Der Hauptunterschied zwischen cronund anacronbesteht darin, dass ersteres davon ausgeht, dass das System kontinuierlich läuft. Wenn Ihr System ausgeschaltet ist und in dieser Zeit ein Job geplant ist, wird der Job nie ausgeführt.

Andererseits anacronist es anachronistisch und wurde für Systeme entwickelt, die nicht rund um die Uhr laufen. Damit es funktioniert, werden anacronmit Zeitstempeln versehene Dateien verwendet, um herauszufinden, wann die Befehle zum letzten Mal ausgeführt wurden. Ebenso wird eine Datei verwaltet, /etc/anacrontabwie dies auch der cronFall ist. Außerdem cron.dailyläuft anacron jeden Tag. Daher anacronkann ein Job nur einmal am Tag ausgeführt werden, aber er cronkann so oft wie jede Minute ausgeführt werden.

Von man anacrontab:

Bei der Ausführung liest Anacron eine Liste von Jobs aus einer Konfigurationsdatei, normalerweise / etc / anacrontab (siehe anacrontab (5)). Diese Datei enthält die Liste der Jobs, die Anacron steuert. Jeder Jobeintrag gibt einen Zeitraum in Tagen, eine Verzögerung in Minuten, eine eindeutige Job-ID und einen Shell-Befehl an.

Anacron prüft für jeden Auftrag, ob dieser Auftrag in den letzten n Tagen ausgeführt wurde, wobei n der für diesen Auftrag angegebene Zeitraum ist. Wenn nicht, führt Anacron den Shell-Befehl des Jobs aus, nachdem er auf die als Verzögerungsparameter angegebene Anzahl von Minuten gewartet hat.

Nachdem der Befehl beendet wurde, zeichnet Anacron das Datum in einer speziellen Zeitstempeldatei für diesen Job auf, damit er weiß, wann er erneut ausgeführt werden muss. Für die Zeitberechnung wird nur das Datum verwendet. Die Stunde wird nicht verwendet.

Dies bedeutet, dass, wenn eine Aufgabe täglich ausgeführt werden soll und der Computer während dieser Zeit ausgeschaltet war, beim Ausführen von anacron angezeigt wird, dass die Aufgabe zuletzt vor mehr als 24 Stunden ausgeführt wurde, und die Aufgabe ordnungsgemäß ausgeführt wird.

Wenn Sie beispielsweise Folgendes in angeben /etc/anacrontab:

7       15      test.daily      /bin/sh /home/username/script.sh

und an dem Tag, an dem der script.shJob ausgeführt werden soll, werden, wenn das System nicht ausgeführt anacronwird, die script.sh15 Minuten ausgeführt, nachdem das System wieder hochgefahren wurde.

Einige Hinweise:

Ron
quelle
Vielen Dank, dass Digital Ocean Tutorial ist besonders gut, wie sie oft sind. Ich bin mir nicht sicher, wie ich es verpasst habe, also schätze ich den Link.
Bio-Marmor
Vielen Dank. Mit "cron.daily führt anacron everyhour aus" können Sie stattdessen "cron.daily führt anacron daily aus" sagen?
StackExchange for All
Danke dafür. - Ich habe anacronalle meine VPSs entfernt, da sie immer in Betrieb sind. (Keine Ahnung, wie es dort hingekommen ist, ich hatte noch nie davon gehört.) Meine crontabEinträge (täglich, wöchentlich, ...) werden jetzt alle zu den erwarteten Zeiten ausgeführt.
Adambean