GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann man Cron sagen, dass er jeden zweiten Tag (ungerade/gerade) einen Befehl ausführen soll?

Wenn Sie Cron so konfigurieren, dass jeden zweiten Tag ein Befehl ausgeführt wird, verwenden Sie das Feld „Tag des Monats“, wie folgt:

1 22 */2 * * COMMAND

Es läuft jedes Mal, wenn der Tag des Monats ungerade ist:1,3,5,7,9 und so weiter.

Wie kann ich Cron so konfigurieren, dass es an Tagen im Monat ausgeführt wird, die gerade wie 2,6,8,10 usw. sind (ohne es wörtlich anzugeben, was problematisch ist, da jeder Monat eine andere Anzahl von Tagen im Monat hat)?

Akzeptierte Antwort:

Die Syntax, die Sie versucht haben, ist eigentlich mehrdeutig. Abhängig davon, wie viele Tage der Monat hat, läuft er in manchen Monaten an ungeraden und in anderen an geraden Tagen. Dies liegt daran, dass die Berechnungsweise die Gesamtzahl der Möglichkeiten nimmt und sie aufteilt. Sie können dieses seltsame Verhalten überschreiben, indem Sie den Tagesbereich manuell angeben und entweder eine ungerade oder eine gerade Anzahl von Tagen verwenden. Da Skripte für gerade Tage niemals am 31. Tag längerer Monate ausgeführt würden, verlieren Sie nichts, wenn Sie 30 Tage als Basis für gerade Tage verwenden, und indem Sie speziell angeben, dass sie so aufgeteilt werden sollen, als ob es 31 Tage gäbe, können Sie ungerade erzwingen -Tagesausführung.

Die Syntax würde wie folgt aussehen:

# Will only run on odd days:
0 0 1-31/2 * * command

# Will only run on even days:
0 0 2-30/2 * * command

Ihre Sorge darüber, dass Monate nicht die gleiche Anzahl von Tagen haben, ist hier nicht wichtig, da kein Monat MEHR Tage als diesen hat, und für den schlechten Februar wird der Datumsbereich einfach nie mit den letzten ein oder zwei Tagen übereinstimmen, aber es wird keinen Schaden anrichten auflisten lassen.

Das einzige Problem bei diesem Ansatz ist, dass Ihr Befehl, wenn Sie sich in einem ungeraden Tageszyklus befinden, nach Monaten mit 31 Tagen auch am Ersten des Monats ausgeführt wird. Ebenso, wenn Sie einen gleichmäßigen Zyklus erzwingen, wird jedes Schaltjahr Ende Februar einen dreitägigen Zyklus verursachen. Sie können nicht wirklich um die Tatsache herumkommen, dass ein regelmäßiges Muster von „jeden zweiten Tag“ nicht immer auf gerade oder ungerade Tage in jedem Monat fällt, und wie auch immer Sie dies erzwingen, Sie werden entweder einen zusätzlichen Lauf haben oder einen Lauf dazwischen verpassen Monate mit nicht übereinstimmenden Tageszählungen.

Siehe auch:Linux – Verknüpfung zum Minimieren aller Fenster?
Linux
  1. Wie richte ich einen Cron-Job ein, um jede Stunde eine ausführbare Datei auszuführen?

  2. Wie richte ich einen CRON-Job so ein, dass er alle 10 Sekunden unter Linux ausgeführt wird?

  3. Linux:Wie man einen Befehl in einem bestimmten Verzeichnis ausführt

  4. Wie kann ich einen Befehl nach dem Booten ausführen?

  5. Wie führe ich Cron-Jobs jeden Tag zu einer bestimmten Stunde aus?

So führen Sie Linux-Befehle im Hintergrund aus

Cron-Jobs alle 5, 10 oder 15 Minuten ausführen

So führen Sie für immer alle X Sekunden einen Linux-Befehl aus

So planen Sie einen Job in Cron so, dass er jede Stunde in Ubuntu 20.04 ausgeführt wird

Wie man Cron alle 5 Minuten, Sekunden, Stunden, Tage, Monate ausführt

Wie würde ich einen Cron-Job dazu bringen, alle 30 Minuten ausgeführt zu werden?