Запускать задание Cron каждые N минут плюс смещение

251

*/20 * * * *

Гарантирует, что он запускается каждые 20 минут, я хотел бы запускать задачу каждые 20 минут, начиная с 5 часов утра, возможно ли это с Cron? Будет ли это:

5/20 * * * * ?

AJP
источник
10
Спасибо вавилонянам, которые решили, что наша система времени должна быть точно разделена на 1,2,3,4,5 и 6.
Arivero
3
если оно делится на 2 и 3, то оно также делится на 6
Ziofil

Ответы:

514

Чтобы запускать задачу каждые 20 минут, начиная с 5 часов утра, попробуйте следующее:

 5-59/20 * * * *

объяснение

*В минуту поле такое же , как , 0-59/1где 0-59есть диапазон и 1является шагом . Команда будет выполняться в первую минуту в диапазоне (0), затем во все последующие минуты, которые далеки от первого шага (1) до последней (59).

Вот почему */20 * * * *будет работать 0 минут, 20 минут после и 40 минут после - что аналогично каждые 20 минут. Однако он */25 * * * *будет запущен через 0 минут, 25 минут после и 50 минут после - что не то же самое, что каждые 25 минут. Вот почему обычно желательно использовать значение шага в поле минут, которое делится равномерно на 60.

Таким образом, чтобы сместить время начала, укажите диапазон явно и установите первое значение равным величине смещения.

Примеры

5-59/20 * * * * будет запущен через 5 минут, через 25 минут и через 45 минут после.

10-59/25 * * * * будет работать через 10 минут после и 35 минут после.

1-59/2 * * * * будет работать каждую нечетную минуту.

toxalot
источник
3
это работает отлично. Как ты это узнал? Можете ли вы указать мне на документы? Спасибо.
AJP
12
Разнообразные поиски в Google привели меня к этому ответу «Ошибка сервера» . Это было ошибкой, которая меня действительно смутила, тем более что другие результаты показали, что шаг модуля минут должен быть равен нулю . Я наконец нашел эту страницу руководства, которая дала мне ответ. В результате я смог прокомментировать ответ «Ошибка сервера», который теперь исправлен. Я не помню фактические условия поиска, которые я использовал, чтобы найти страницу IBM.
Токсалот
3
Спасибо и очень хорошая работа @toxalot, я бы хотел, чтобы мы наградили вас значком "Tireless Investigator"! : P
AJP
5
РЖУНИМАГУ. Мне нужно было запускать работу каждые 10 минут (смещение на 5), и я действительно не хотел использовать список с разделителями-запятыми, поэтому я решил найти ответ.
Токсалот
2
К сожалению, CPanel это не нравится :(
Роберт Вент
53

Конечно!

5,25,45 * * * * /your/cron
Федорки "ТАК прекратить вредить"
источник
2
Спасибо. Я закончил тем, что делал это, надеялся, что могло бы быть более изящное решение для этого.
AJP
13
Иногда простое решение лучше, потому что его легко читать и понимать. Мне нравится знать, что 5-59/20это возможно, но 5,25,45имеет то преимущество, что сразу становится ясно, что это делает.
Томасруттер
2
только если ваш шаг достаточно большой
Теб
3
Это гораздо лучший пример. Требуется 0 когнитивных нагрузок, чтобы понять, когда начинается работа.
Дилан Пирс,
11

Можешь попробовать: */5 * * * * sleep N; your job

Лео Чу
источник
4
Я не вижу в этом ничего плохого - на самом деле это очень похоже на то, как работа cron в certbot достигает случайного смещения, которое помогает поддерживать балансировку нагрузки на сервер. конечно не заслуживает всех этих отрицательных голосов
billynoah
6
Это заставило меня задуматься, как спать произвольное количество секунд. sleep `shuf -i 1-100 -n 1`делает трюк.
Laizer
черт побери, @Laizer ты заставил меня учиться чему-то снова! (спасибо!)
UncaAlby