crontab dzień tygodnia vs. dzień miesiąca?

14

Dodałem to do / etc / crontab na kilku różnych systemach Linux i FreeBSD:

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

Chcę restartować 3 WTORKU każdego miesiąca. Jednak wszystkie systemy uruchomiono ponownie w trzecią środę tego miesiąca (19).

Co ja robię źle?

Aktualizacja : Dzięki poniższej odpowiedzi Ranona wygląda na to, że poniższa wersja będzie działać, czy ktoś może potwierdzić, czy jest jeszcze lepszy sposób?

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

Odpowiedzi:

16

Spójrz na man 5 crontab.

Uwaga: Dzień wykonania polecenia można określić za pomocą dwóch pól - dnia miesiąca i dnia tygodnia. Jeśli oba pola są ograniczone (tzn. Nie są *), polecenie zostanie uruchomione, gdy jedno z pól będzie pasować do aktualnego czasu Na przykład `` 30 4 1,15 * 5 '' spowodowałoby uruchomienie polecenia o 4:30 rano 1 i 15 każdego miesiąca oraz w każdy piątek. Można jednak osiągnąć pożądany wynik, dodając test do polecenia (patrz ostatni przykład w PRZYKŁADOWY PLIK CRON poniżej).

Twoje serwery powinny więc restartować się codziennie od 15-21 ORAZ we wtorek.

Spójrz na przykład stron:

# Run on every second Saturday of the month
0 4 8-14 * *    test $(date +%u) -eq 6 && echo "2nd Saturday"
Jens Erat
źródło
6
To poważnie wygląda na błąd projektowy. Gdybym chciał codziennie od 15 do 21 ORAZ w każdy wtorek zrobiłbym dwa osobne wpisy w crontab. Konieczność skorzystania z osobnego testu to brzydki hack. Mimo to dziękuję za obejście tego problemu!
Laurence Gonsalves,