Запускать задание Cron каждые N минут плюс смещение
251
*/20 * * * *
Гарантирует, что он запускается каждые 20 минут, я хотел бы запускать задачу каждые 20 минут, начиная с 5 часов утра, возможно ли это с Cron? Будет ли это:
Спасибо вавилонянам, которые решили, что наша система времени должна быть точно разделена на 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 * * * * будет работать каждую нечетную минуту.
это работает отлично. Как ты это узнал? Можете ли вы указать мне на документы? Спасибо.
AJP
12
Разнообразные поиски в Google привели меня к этому ответу «Ошибка сервера» . Это было ошибкой, которая меня действительно смутила, тем более что другие результаты показали, что шаг модуля минут должен быть равен нулю . Я наконец нашел эту страницу руководства, которая дала мне ответ. В результате я смог прокомментировать ответ «Ошибка сервера», который теперь исправлен. Я не помню фактические условия поиска, которые я использовал, чтобы найти страницу IBM.
Токсалот
3
Спасибо и очень хорошая работа @toxalot, я бы хотел, чтобы мы наградили вас значком "Tireless Investigator"! : P
AJP
5
РЖУНИМАГУ. Мне нужно было запускать работу каждые 10 минут (смещение на 5), и я действительно не хотел использовать список с разделителями-запятыми, поэтому я решил найти ответ.
Спасибо. Я закончил тем, что делал это, надеялся, что могло бы быть более изящное решение для этого.
AJP
13
Иногда простое решение лучше, потому что его легко читать и понимать. Мне нравится знать, что 5-59/20это возможно, но 5,25,45имеет то преимущество, что сразу становится ясно, что это делает.
Томасруттер
2
только если ваш шаг достаточно большой
Теб
3
Это гораздо лучший пример. Требуется 0 когнитивных нагрузок, чтобы понять, когда начинается работа.
Я не вижу в этом ничего плохого - на самом деле это очень похоже на то, как работа cron в certbot достигает случайного смещения, которое помогает поддерживать балансировку нагрузки на сервер. конечно не заслуживает всех этих отрицательных голосов
billynoah
6
Это заставило меня задуматься, как спать произвольное количество секунд. sleep `shuf -i 1-100 -n 1`делает трюк.
Laizer
черт побери, @Laizer ты заставил меня учиться чему-то снова! (спасибо!)
Ответы:
Чтобы запускать задачу каждые 20 минут, начиная с 5 часов утра, попробуйте следующее:
объяснение
*
В минуту поле такое же , как ,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 * * * *
будет работать каждую нечетную минуту.источник
Конечно!
источник
5-59/20
это возможно, но5,25,45
имеет то преимущество, что сразу становится ясно, что это делает.Можешь попробовать:
*/5 * * * * sleep N; your job
источник
sleep `shuf -i 1-100 -n 1`
делает трюк.