crontab giorno della settimana vs. giorno del mese?


14

Ho aggiunto questo a / etc / crontab su alcuni diversi sistemi linux e freebsd:

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

Voglio un riavvio il terzo MARTEDI di ogni mese. Tuttavia, tutti i sistemi sono stati riavviati il ​​3 ° mercoledì di questo mese (il 19).

Che cosa sto facendo di sbagliato?

Aggiornamento : grazie alla risposta di Ranon di seguito, sembra che la revisione di seguito funzionerà, qualcuno può confermare o esiste un modo ancora migliore per farlo?

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

Risposte:


16

Dai un'occhiata man 5 crontab.

Nota: il giorno dell'esecuzione di un comando può essere specificato da due campi: giorno del mese e giorno della settimana. Se entrambi i campi sono limitati (ovvero non lo sono *), il comando verrà eseguito quando uno dei campi corrisponde all'ora corrente. Ad esempio, `` 30 4 1,15 * 5 '' causerebbe l'esecuzione di un comando alle 4:30 del mattino il 1 ° e il 15 di ogni mese, più ogni venerdì. Tuttavia, è possibile ottenere il risultato desiderato aggiungendo un test al comando (vedere l'ultimo esempio in FILE CRON ESEMPIO di seguito).

Quindi i tuoi server dovrebbero riavviarsi ogni giorno dalle 15 alle 21 E ogni martedì.

Dai un'occhiata all'esempio delle manpage:

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

6
Questo sembra davvero un bug di progettazione. Se volessi ogni giorno dal 15 al 21 E ogni martedì farei due voci crontab separate. Dover ricorrere a un test separato è un brutto trucco. Detto questo, grazie per aver fornito una soluzione alternativa!
Laurence Gonsalves,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.