Wenn ich als wöchentlicher Job etwas zu cron hinzufüge, wird es nicht ausgeführt, es sei denn, mein Computer ist zu genau diesem Zeitpunkt eingeschaltet?

462
Zombies

Sagen wir, ich mache das:

0 0 0 * * somejob 

Läuft dies an einem festgelegten Datum, und wenn mein Computer zu diesem Datum nicht auf Nein steht, wird diese Woche übersprungen?

Nehmen wir an, ich habe diesen Job gerade eingestellt. Und dann ist mein Computer den ganzen Tag über 5 Tage lang ausgeschaltet.

Grundsätzlich brauche ich jede Woche etwas, aber mein Computer ist möglicherweise nicht rund um die Uhr verfügbar.

2
Sie müssen die Maschine laufen lassen, damit der Job ausgeführt werden kann ... nicorellius vor 13 Jahren 0

2 Antworten auf die Frage

4
David Z

Ja, es cronwird nur ein Job ausgeführt, der für eine bestimmte Zeit geplant ist, wenn der Computer zu diesem Zeitpunkt eingeschaltet ist. Es funktioniert so, dass jede Minute alle geplanten Cron-Jobs daraufhin überprüft werden, ob ihre Zeitfelder mit der aktuellen Minute übereinstimmen. Wenn ja, wird der Job ausgeführt. Wenn nicht, wird es übersprungen. Es gibt kein Konzept, die Ausführung eines Jobs für einen späteren Zeitpunkt zu "speichern".

In Ihrer Situation können Sie eine Markierungsdatei verwenden, um anzuzeigen, wann der Job zuletzt ausgeführt wurde. Erstellen Sie ein kleines Skript oder Programm, das folgendermaßen aussieht (dies ist eine Pseudo-Bash-Syntax):

if (marker file was last modified > 1 week ago); then run the job touch marker file fi 

Sie können dieses Skript als cron-Job so einstellen, dass es jeden Tag, jede Stunde oder sogar jede Minute ausgeführt wird - so oft, wie es erforderlich ist, um sicherzustellen, dass es mindestens einmal pro Woche ausgeführt wird, während Sie Ihren Computer eingeschaltet haben.

2
notpeter

Anacron ist wahrscheinlich das, wonach Sie suchen:

Anacron ist ein periodischer Befehlsplaner. Es führt Befehle in Intervallen aus, die in Tagen angegeben sind. Im Gegensatz zu cron wird nicht davon ausgegangen, dass das System kontinuierlich läuft.