Я столкнулся с ситуацией, когда работа cron, о которой я думал, работала каждые 55 минут, на самом деле работает через 55 минут после часа и в верхней части часа. На самом деле это не работа cron, но это приложение планирования PHP, которое использует синтаксис cron.
Когда я прошу это приложение планировать работу каждые 55 минут, он создает линию crontab, как показано ниже.
*/55 * * * *
Эта строка crontab заканчивается не, выполняющей задание каждые 55 минут. Вместо этого работа проходит через 55 минут после часа и в верхней части часа. Я не хочу этого. Я запустил это, хотя cron tester, и он проверяет, что нежелательное поведение - правильное поведение cron.
Это приводит меня к тому, чтобы посмотреть, что означает /
. Когда я посмотрел на cron manual, я узнал, что косая черта обозначена как "шаги", но сама инструкция немного нечеткая, что означает
Значения шагов могут использоваться в сочетании с диапазонами. После диапазона с "
<number>
" указывает пропускание значения числа через диапазон. Например, в поле часов можно использовать "0-23/2
", чтобы указать выполнение команды каждый час (альтернатива в стандарте V7 "0,2,4,6,8,10,12,14,16,18,20,22"
). Шаги также разрешены после звездочки, поэтому, если вы хотите сказать" каждые два часа ", просто используйте"*/2
".
Описание руководства ( "указывает пропуски значения числа через диапазон" ) немного расплывчато, а пример "каждые два часа" мало вводит в заблуждение (что, вероятно, привело к ошибке в приложении)
Итак, два вопроса:
-
Как программа unix cron использует информацию о шаге (число после косой черты), чтобы решить, следует ли пропустить выполнение задания? (модульное деление? Если да, то на чем? С какими условиями, решающими "истинный" прогон, а какие решения нет? Или это что-то еще?)
-
Можно ли настроить задание unix cron для запуска каждой "N" минут?