Подтвердить что ты не робот

Является ли следующее выражение cron каждые 45 минут?

Я желаю запустить script каждые 45 минут (а не: 45-я минута каждого часа)

например. 10:00, 10:45, 11:30, 12:15 и т.д.

*/45 * * * *

Не уверен, что это правильное выражение.

4b9b3361

Ответ 1

Я подозреваю (сейчас редактирую: я уверен), что он не делает то, что вы хотите: поля являются отдельными, а */45 для минут - не более чем 0,45. Я бы использовал следующие три записи, если */45 не выполняет задание:

0,45  0-23/3 * * *
30    1-23/3 * * *
15    2-23/3 * * *

Если вы посмотрите файл entry.c в источниках vixie cron, вы заметите, что каждое поле каждой записи анализируется get_list и представлено как растровые изображения допустимых значений для этого поля. Это почти исключает любую "умную" интерпретацию, поскольку на этом этапе теряется различие */45 и 0,45... но есть флаг MIN_STAR, установленный в присутствии * в минутах (включая */45). Итак, взглянем на cron.c, на одно место, где исследуется MIN_STAR, чтобы узнать, что это не связано с нашей проблемой. Теперь мы точно знаем, что */45 означает "каждые 45 минут каждого часа": 0:00, 0:45, 1:00, 1:45 и т.д.

Здесь было два ответа, уверенно заявляющих об обратном, цитируя неудачный отрывок в руководстве:

Шаги также разрешены после звездочки, поэтому, если вы хотите сказать "каждые два часа", просто используйте "*/2"

Нам повезло, что у нас есть 24-часовой день, содержащий четное количество часов, делая "каждые два часа с 0:00, каждый день" и "каждые два часа вообще" неразличимы. Жаль, что руководство не зашло достаточно далеко, чтобы документировать нетривиальные случаи, создавая впечатление, что * */22 означает каждые 22 часа. Это не. Звезда с шагом - это просто сокращение списка значений в поле, где оно использовалось; он не взаимодействует с другими полями.

Ответ 2

При базовом времени cron ваша система проверяет один раз в минуту, чтобы увидеть, есть ли какие-либо cronjobs для запуска. Он будет смотреть на ваш кронтаб, и если пришло время бежать, то он побежал! Но каждые 45 минут - это интервал, который всегда будет на 15-минутной отметке на циферблате. например, начиная с нуля, первый - 0:45. Далее будет 90 минут с нуля или 1:30, а следующий будет 2:15... так легко вы можете видеть, что время для каждого экземпляра, который вы хотите исполнить, script, минутная стрелка будет на 12, 3, 6 или 9. Если вы выполняете свой script каждые 15 минут и проверяете час, чтобы узнать, является ли он правильным, вы можете выполнить свой script. Вероятно, вы используете либо таблицу, либо вы можете использовать функцию modulo. Ура!