Crontab Wochentag vs. Monatstag?


14

Ich habe dies / etc / crontab auf ein paar verschiedenen Linux- und Freebsd-Systemen hinzugefügt:

# monthly reboot: 3rd Tuesday of every month
56 07 15-21 * 2 root /sbin/shutdown -r now

Ich möchte jeden 3. DIENSTAG im Monat einen Neustart durchführen. Alle Systeme wurden jedoch am 3. Mittwoch dieses Monats (dem 19.) neu gestartet.

Was mache ich falsch?

Update : Dank Ranons unten stehender Antwort wird die unten stehende Revision funktionieren. Kann jemand dies bestätigen oder gibt es eine noch bessere Möglichkeit, dies zu tun?

# monthly reboot: 3rd Tuesday of every month
56 07 15-21 * * root test $(date +\%u) -eq 2 && /sbin/shutdown -r now

Antworten:


16

Schau es dir an man 5 crontab.

Hinweis: Der Tag der Befehlsausführung kann in zwei Feldern angegeben werden: Tag des Monats und Wochentag. Wenn beide Felder eingeschränkt sind (dh nicht *), wird der Befehl ausgeführt, wenn eines der Felder mit der aktuellen Zeit übereinstimmt. Beispiel: "30 4 1,15 * 5" bewirkt, dass ein Befehl am 1. und 15. eines jeden Monats sowie jeden Freitag um 4:30 Uhr ausgeführt wird. Sie können jedoch das gewünschte Ergebnis erzielen, indem Sie dem Befehl einen Test hinzufügen (siehe das letzte Beispiel in BEISPIEL CRON-DATEI unten).

Daher sollten Ihre Server jeden Tag von 15 bis 21 Uhr UND jeden Dienstag neu gestartet werden.

Schauen Sie sich das Beispiel der Hilfeseiten an:

# Run on every second Saturday of the month
0 4 8-14 * *    test $(date +%u) -eq 6 && echo "2nd Saturday"

6
Dies scheint ernsthaft ein Designfehler zu sein. Wenn ich jeden Tag von 15 bis 21 Uhr UND jeden Dienstag zwei separate Crontab-Einträge machen wollte. Auf einen separaten Test zurückgreifen zu müssen, ist ein hässlicher Hack. Trotzdem vielen Dank, dass Sie eine Problemumgehung bereitgestellt haben!
Laurence Gonsalves
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.