Ich möchte wissen, wie cron
intern funktioniert. Überprüft der Prozess weiterhin die aktuelle Zeit in einer Endlos-while-Schleife (wodurch kontinuierlich CPU-Zyklen verbraucht werden)? Oder generiert eine Funktion einen Interrupt und benachrichtigt den cron
Daemon?
7
Ich bin mir sicher, dass es viele Variationen gibt. Die Funktionsweise von dcron (auch bekannt als Dillons Cron-Daemon) besteht darin, dass es jeweils bis zu 60 Sekunden lang schläft. Es versucht, dies zu synchronisieren, indem es bei Bedarf weniger schläft, um aufzuwachen 00 Sekunden jeder Minute.
Es verwendet,
sleep()
wodurch der Prozess in den Ruhezustand versetzt wird (sofern kein Signal auftritt), ohne die CPU zu verwenden. Wenn es aufwacht, sucht es nach einer Dateicron.update
(erstellt durchcrontab
Bearbeiten). Bei Bedarf wird die Ausführungswarteschlange neu erstellt, die erwarteten Aufgaben ausgeführt und der Ruhezustand erneut ausgeführt.Mindestens ein Cron-Daemon (
fcrond
) verwendet anstelle eines Sleep / Check-Ansatzes ein Signal, das durch Crontab-Bearbeitung an den Cron-Daemon gesendet wird.Ich habe noch nie einen Crond gesehen, der Dinge häufiger als einmal pro Minute ausführt, daher sind die Ressourcen normalerweise recht sparsam.
Wenn Sie sich unter Linux
/proc
Dinge wie gelesene / geschriebene Bytes oder iowait ansehen, stellencrond
Sie möglicherweise fest, dass die Nutzung relativ hoch ist. Dies liegt daran, dass letztendlich alle untergeordneten Prozesse berücksichtigt werden, die gestartet werden, z. B. unter CentOS 5.x:(Dank geplanter Paketaktualisierungen und ASLR / Pre-Link-Aufgaben in diesem Fall)
Siehe auch /programming/3982957/how-does-cron-internally-schedule-jobs .
quelle
fcron
Wacht nicht jede Minute auf, nur um zu überprüfen, ob etwas zu tun ist. "Dann berechnet fcron die Uhrzeit und das Datum der nächsten Ausführung jedes Jobs und bestimmt, wie lange er schlafen muss und wie lange er schläft." - Mann fcronfcrond
, hat nur die Quelle überprüft: Es ruft einen Helfer auf, um das HUPcrond
.