Ist der Cron Job Scheduler wirklich genau?
Ich meine, ich brauche ein Skript, um jede Nacht die späteste Zeit auszuführen, ABER vor 00:00 Uhr des nächsten Tages.
Ich würde im Idealfall um 23.59 Uhr (oder 23:59 Uhr) einen Cron-Job ausführen, aber wird das System wirklich präzise sein? Sollte ich den Cron-Job auf 23:58 setzen, damit er eine Weile verbleibt?
Antworten:
Was Cron garantieren kann, ist, dass Ihr Job nicht früher als zur angegebenen Zeit startet (abhängig von der Genauigkeit der Systemuhr). Sie können jedoch keine Garantie für die Beendigung des Auftrags geben. Es wird von vielen Faktoren abhängen:
Ich empfehle, Ihr Design so zu ändern, dass eine bestimmte Fertigstellungszeit nicht erforderlich ist.
quelle
O_CREAT
andO_EXCL
flags verwenden, ist dies atomar, solange sich die Datei auf einem lokalen Dateisystem befindet.Ich nehme an, das hängt von Ihrem Cron-Daemon ab, aber die Dokumentation und der Standard geben an, dass der Job zur angegebenen Minute ausgeführt wird, wenn Sie Minuten angeben.
Sehen:
Beachten Sie, dass Ihr Skript gestartet wird, wenn die Uhr auf die richtige Zeit umschaltet, aber einige Zeit später beendet wird.
quelle
Normalerweise startet cron um 23:59:00 Uhr , scannt alle Ihre crontab-Dateien, filtert diejenigen heraus, die für 23:59 relevant sind, und startet sie dann. Das Scannen dieser Dateien ist sehr schnell, da es nicht viele davon gibt und alle nur wenige Zeilen enthalten. Normalerweise beginnen die Cronjobs um 23:59:00 oder 23:59:01. Es gibt sichere Möglichkeiten, diesen Prozess absichtlich zu verlangsamen. (Fügen Sie der Crontab beispielsweise Millionen von Zeilen hinzu.) Wenn das System vollständig überlastet ist, funktioniert dies auch nicht so schnell.
Auch dies ist offensichtlich implementierungsabhängig.
Wenn Sie sehr genaue Startzeiten benötigen, ist es besser, ein Programm zu erstellen, das sich bis zur gewünschten Zeit im Ruhezustand befindet und dann ausgeführt wird (z. B. mit c ++ 11 ). Aber auf einem Nicht-Echtzeit-Betriebssystem ist dies auch nicht exakt! Auch die Uhr des PCs kennt die genaue Uhrzeit nicht!
In allen Fällen wird nur sichergestellt, dass das Programm zu der von Ihnen gewünschten Zeit (mehr oder weniger) startet . Es gibt keine Garantie dafür, dass das Programm bis zu einem bestimmten Zeitpunkt erfolgreich beendet wird. Ich bin daher der festen Überzeugung, dass Sie an dieser Anforderung etwas ändern sollten.
quelle
Dies hängt von Ihrer gesamten Skriptausführungszeit und der Genauigkeit der Serverzeit ab.
Das Skript wird genau um 23:59 Uhr gestartet. Wenn Sie jedoch einige Befehle haben, die lange funktionieren, wird ein Teil des Skripts möglicherweise nach Mitternacht ausgeführt.
quelle