У меня есть требование, при котором я пишу утилиту, которая требует, чтобы триггер cron срабатывал немедленно, а затем через регулярный интервал в 30 или 40 минут. Прямо сейчас мое выражение выглядит так: 0 0/40 * * * ? но он запускает триггер через 40 минут после запуска приложения. Каким должно быть выражение или программный способ реализации описанного выше сценария в java.
триггер cron, который запускается немедленно, а затем запускается через интервал времени
Ответы (2)
Cron не имеет возможности запускать задание каждые 40 минут. На самом деле */40 * * * *
будет запускать задание на 40-й минуте каждого часа, а затем в конце 59-й минуты каждого часа и так далее. Таким образом, интервалы между заданиями будут 40 минут, затем 20 минут и так далее. Причина в том, что 60 не делится на 40.
40 * * * *
просто запускает задание на 40-й минуте каждого часа (раз в час).
*/30 * * * *
, с другой стороны, действительно будет запускать задание каждые 30 минут, потому что 60 mod 30 = 0
Если вы действительно хотите запускать каждое задание КАЖДЫЕ 40 минут, вам может понадобиться более продвинутый планировщик, например fcron (http://fcron.free.fr/). Этот планировщик действительно поддерживает эту и некоторые другие интересные функции.
Отвечая на вопрос о немедленном запуске задания, я бы предложил просто запрограммировать задание на следующую минуту, а внутри вашего сценария поддерживать счетчик и разрешить выполнение сценария только один раз. После того, как скрипт выполнен, он может разумно удалить себя из cron.
Вы можете настроить запуск cron так, как хотите. Вам просто нужно получить текущую минуту часа и настроить cron для запуска в эту минуту. Итак, если, скажем, вы хотите, чтобы cron запускался на 20-й минуте часа и запускался каждые 30 минут, вы можете установить что-то вроде:
20-59/30 * * * *
Это означает, что cron сработает на 20-й минуте часа, а затем снова через 30 минут (то есть на 50-й минуте).