Запускайте 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 не поддерживает >= а также <= в сравнении строк.

Другие вопросы по тегам