Cron Command два раза в месяц в субботу в 12:00
Мне интересно, может ли кто-нибудь помочь с простыми, но иногда запутанными командами относительно заданий Cron.
Я хотел бы, чтобы работа cron запускалась два раза в месяц в субботу в 12:00.
3 ответа
То, что вы хотите, к сожалению, невозможно. Расписание «два раза в месяц по субботам» невозможно выразить с помощью crontab. Вы можете сказать «два раза в месяц» или «по субботам», но вы не можете связать эти условия с помощью AND. Они всегда будут связаны с помощью OR. Согласноman 5 crontab
:
Примечание. День выполнения команды можно указать в двух полях — день месяца и день недели. Если оба поля ограничены (т. е. не имеют *), команда будет запущена, когда любое поле соответствует текущему времени. Например, ``30 4 1,15 * 5'' приведет к запуску команды в 4:30 утра 1-го и 15-го числа каждого месяца, а также каждую пятницу.
Однако вы можете использовать выражение оболочки, чтобы помочь!
Я нашел это предложение на сайте:
0 0 * * Sun [ $(expr $(date +%W) % 2) -eq 1 ] && /path/to/command
Давайте разберем это!
-
0 0 * * Sun
это расписание cron. Он работает в полночь каждое воскресенье. -
[ $(expr $(date +%W) % 2) -eq 1 ] && /path/to/command
это команда (что касается cron)-
[ $(expr $(date +%W) % 2) -eq 1 ]
успешно возвращается, если номер недели в году нечетный-
expr $(date +%W) % 2
принимает выводdate +%W
(«номер недели года, понедельник — первый день недели (00..53)», также доступны другие варианты) и применяет операцию по модулю (деление на два, возврат остатка) -
[ $something -eq 1 ]
проверяет, является ли$something
равно 1 и возвращает результат в качестве кода завершения
-
-
&& /path/to/command
означает запуск команды, если предыдущая команда была успешной (т. е. если номер недели нечетный)
-
Используя это выражение, вы можете сохранить свои сценарии неизмененными, а логику принятия решений — внутри файла crontab.
Я думаю
0 0 * */2 6
будет запускаться через месяц, каждую субботу этого месяца.
Чтобы быть два раза в месяц это должно быть
0 0 */15 * 6
Ура!
По словам мужчины 5 кронтаб
Значения шага могут использоваться вместе с диапазонами. После диапазона с /<число> указывается пропуск значения числа через диапазон. Например, 0-23 / 2 можно использовать в поле часов, чтобы указать выполнение команды через час (альтернатива в стандарте V7 - 0,2,4,6,8,10,12,14,16,18, 20,22). Шаги также разрешены после звездочки, поэтому, если вы хотите сказать каждые два часа, просто используйте * / 2.
Это 0 0 * */2 6 <other parts>