Запускайте CronExpression между определенным временем (но не в час)
Я видел немало вопросов, связанных с настройкой CronExpressions. Но все они, кажется, имеют точные часы (без указания минут) в качестве временного интервала для бега.
Есть ли способ настроить CronExpression для запуска, скажем, каждые 5 минут каждого дня между 7:37AM и 9:13PM? Настройка для 7 утра - 9 вечера проста. Но я не могу понять, есть ли способ (возможно, он даже не поддерживается) работать по более детальному расписанию.
У меня есть приложение, которое позволяет пользователям указывать собственные графики. Прямо сейчас я округляю вверх / вниз до ближайшего "целого часа", так как не могу понять, как делать определенное время.
Так, например, это работает
0 0/5 2-16? * 1-7 // выполняется каждые 5 минут с 2:00 до 16:00 каждый день недели
Итак, каким будет выражение, если я хочу запустить:
каждые 5 минут с 2:19 до 16:13?
Или это просто невозможно (не считая создания нескольких CronExpressions и превращения их в беспорядочный imo)
Любая помощь, с благодарностью!
1 ответ
Если вы введете man 5 crontab
вы увидите следующий пример:
# Run on every second Saturday of the month 0 4 8-14 * * test $(date +\%u) -eq 6 && echo "2nd Saturday"
Применяя это к вашему делу:-
0 0/5 2-16 ? * 1-7 test $(date +\%R) \> 02:19 -a $(date +\%R) \< 16:13 && YourCommand
В качестве альтернативы, если YourCommand
это скрипт, вы можете включить в него временные тесты.
Обратите внимание, что, поскольку команда вызывается с кратностью 5 минут после часа, тесты для >
а также >=
эквивалентны (аналогично <
а также <=
); в противном случае вам может понадобиться скорректировать границы теста (например, >= 02:18
), поскольку test
не поддерживает >=
а также <=
в сравнении строк.