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>

Другие вопросы по тегам