Wie wird die Cron-Planung tatsächlich implementiert und sichergestellt, dass die Skripte pünktlich ausgeführt werden?

9

Ich möchte nach Cron Jobs fragen. OK, wir platzieren die Skripte in der Crontab und der Cron-Daemon führt sie aus.

Wenn ich das verstehe, überprüft cron jede Minute die crontab jedes Benutzers und führt die konfigurierten Skripte aus. Aber wie geht das eigentlich? Gabelt es untergeordnete Prozesse usw.?

Die Aufgaben können nicht nacheinander ausgeführt werden, da die Zeitangaben verloren gehen würden (z. B. aufgrund des Wartens eines lang laufenden Skripts auf den Abschluss). Wie wird das tatsächlich umgesetzt?

Nur um zu helfen, suche ich keinen Code auf niedriger Ebene. Eine Beschreibung auf hoher Ebene (vielleicht des Algorithmus?) Oder wie dies in den meisten Distributionen implementiert ist, würde mir genügen.

Jim
quelle

Antworten:

9

Ich fand diese Fragen und Antworten bei StackOverflow mit dem Titel: Wie plant cron Jobs intern? .

Auszug aus diesem Beitrag und dem Wikipedia-Artikel über Cron

The algorithm used by this cron is as follows:

1. On start-up, look for a file named .crontab in the home directories of 
   all account holders.

2. For each crontab file found, determine the next time in the future that
   each command is to be run.

3. Place those commands on the Franta-Maly event list with their corresponding
   time and their "five field" time specifier.

4. Enter main loop:

   1. Examine the task entry at the head of the queue, compute how far in 
      the future it is to be run.

   2. Sleep for that period of time.

   3. On awakening and after verifying the correct time, execute the task 
      at the head of the queue (in background) with the privileges of the 
      user who created it.

   4. Determine the next time in the future to run this command and place 
      it back on the event list at that time

Diese SuperUser-Fragen und Antworten mit dem Titel: Wie funktioniert Cron? behandelt einige Ihrer zusätzlichen Fragen. Zum Beispiel Ihre Frage, wie cron mit Jobs umgeht, die zur gleichen Zeit geplant sind. Eine der Antworten in diesem Thread besagt, dass der Cron-Dämon bei der Verarbeitung jeder Aufgabe jeden geplanten Job so verzweigt, dass kein einzelner Job als Blocker für Jobs mit überlappenden Zeiten fungiert.

slm
quelle
Wenn es sich um eine Warteschlange handelt, werden Aufgaben nacheinander ausgeführt (die in derselben Warteschlange). Wenn eine Aufgabe 3 Minuten für die Ausführung benötigt und die nächste Aufgabe in der Warteschlange voraussichtlich in der nächsten Minute geplant wird, wie geschieht dies?
Jim
@ Jim - Ich denke, eine Vereinfachung, die Sie annehmen, ist, dass die Dateien jede Minute gelesen werden, wenn dies überhaupt nicht der Fall ist. Wenn Sie die Datei speichern, nimmt der crond-Daemon den Inhalt der crontab für einen bestimmten Benutzer auf und fügt ihn in einer sortierten Reihenfolge zur Warteschlange hinzu, basierend auf der zukünftigen Zeit, die er voraussichtlich ausführen wird.
slm
Ok. In diesem Fall könnte die Warteschlange Aufgaben haben, die gleichzeitig ausgeführt werden sollten. Also sind untergeordnete Prozesse gegabelt oder so?
Jim
@ Jim - genau. Siehe auch meine zusätzlichen Kommentare in der Antwort.
slm
Wie erkennt es neue Aufgaben, die wir für cron erstellen? Verwendet es so etwas wie inotify, um das Dateisystem oder etwas anderes zu sehen?
CMCDragonkai