Возможный дубликат:
cron: как планировать запуск первого воскресенья каждого месяца
Я хочу выполнить php-скрипт в каждое первое воскресенье месяца в 7 утра. Я ввел следующую строку на серверах crontab.
0 7 1-7 * 0 user /path/to/script.php
Сегодня я увидел, что сценарий действительно работал в среднесрочное утро. Как это могло случиться? Я думал, что последние 0
определяют воскресенье?
Благодарим вас за помощь в продвижении.
На странице руководства:
Команды выполняются cron (8), когда поля минуты, часа и месяца года соответствуют текущему времени, и когда по крайней мере одно из двух дневных полей (день месяца или день недели) соответствует текущему времени (см. «Примечание» ниже).
и позже:
Примечание. День выполнения команды может быть задан двумя полями: день месяца и день недели. Если оба поля ограничены (т. Е. Не являются *), команда будет выполняться, когда любое поле совпадает с текущим временем. Например, “ 30 4 1,15 * 5 '' заставит команду запускаться в 4:30 утра 1 и 15 числа каждого месяца плюс каждую пятницу.
Другими словами, ваш скрипт работает с 1-го по 7-й, а также в любое воскресенье.
Поля 3 и 5 не работают вместе, как вы предполагаете.
Вам нужно будет установить поле 5 на * и изменить ваш скрипт php, чтобы проверить, является ли текущий день воскресным, прежде чем он будет продолжен.
Спецификация вашего cron:
0 - run at minute 0 7 - run at hour 7 1-7 - run on days 1,2,3,4,5,6,7 * - all months 0 - day 0 of the week
Я не думаю, что вы можете ограничить его только первым типом дня с помощью инструментов, доступных в cron. Вы можете попробовать
0 7 * * 0
который запускал каждое воскресенье, но нет способа сказать «только в первое воскресенье», так что это будет работать каждое воскресенье. Однако вы можете изменить свой скрипт, чтобы проверить, в какое воскресенье оно выполняется, и просто выйти, если он не первый.