crontab день тижня проти дня місяця?


14

Я додав це до / etc / crontab у кількох різних системах Linux та freebsd:

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

Я хочу перезавантажитись 3-го ВРЕДНЯ кожного місяця. Однак усі системи перезавантажилися 3-ї середи цього місяця (19-го).

Що я роблю неправильно?

Оновлення : Завдяки відповіді Ранона нижче, схоже, що нижченаведена редакція спрацює, чи може хто-небудь підтвердити чи існує ще кращий спосіб зробити це?

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

Відповіді:


16

Погляньте man 5 crontab.

Примітка: День виконання команди може бути визначений двома полями - день місяця та день тижня. Якщо обидва поля обмежені (тобто не є *), команда буде виконуватися, коли будь-яке поле відповідає поточному часу. Наприклад, `` 30 4 1,15 * 5 '' призведе до запуску команди о 4:30 1-го та 15-го числа кожного місяця плюс щоп’ятниці. Однак можна досягти бажаного результату, додавши в команду тест (останній приклад див. У прикладі CRON FILE нижче).

Тому ваші сервери повинні перезавантажуватися щодня з 15-21 І кожного вівторка.

Погляньте на приклад керівництва:

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

6
Це серйозно здається дизайнерською помилкою. Якби я хотів щодня з 15-21 І кожного вівторка, я робив би дві окремі записи на кронтабі. Доводиться вдаватися до окремого випробування - це некрасивий злом. Це сказав, спасибі за надання вирішення!
Лоранс Гонсалвес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.