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
ane
quelle

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"
Jens Erat
quelle
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