Назад | Перейти на главную страницу

Планирование выполнения задания каждые 23 минуты

Бывают случаи, когда мне нужно выполнить запланированное задание более сложным способом, который может предоставить Cron. Скажем, чтобы запланировать запуск задания каждые 23 или 65 минут.

В последнем случае это можно обойти, добавив несколько записей Cron для запуска одной и той же строки. В первом случае количество добавляемых строк становится слишком большим.

Три очевидных решения:

но все они неудобны при определенных обстоятельствах.

Есть ли более умная замена Cron, доступная хотя бы для систем POSIX, способная использовать произвольные расписания?

Чтобы запускать задание каждые 23 минуты, следующее не сработает:

* / 23 * * * * / некоторые / команда

Поскольку это будет работать в 00:00, 00:23, затем через 23 минуты, снова в 00:46, а затем снова в 01:00, что на 14 минут позже, а не каждые 23 минуты.

Причина в том, что / в */23 является не математический "разделить на" и не совпадает "всякий раз, когда количество минут (с каких это пор? полночь?) кратно 23" .

*/23 скорее "приращения". Это указывает cron на соответствие каждому 23rd пункт (/23) из набора минут 0 1 2 3 4 5 6 7 8 9 10 11 ... 59 (для которого * это сокращение) то есть минуты 0, 23 & 46.

Это инкрементное поведение также позволяет вам сместить смещение, т.е. начать диапазон с 1, а не с 0:

1-59/23 * * * * /some/command 

Эта работа теперь будет выполняться каждый час, 1 минута назад, 24 минут назад и снова 47 минут в час.


Я согласен с вашей оценкой, что для нечетных расписаний синтаксиса cron недостаточно.

Cron - очень простой планировщик, управляемый по времени.

Я предполагаю, что вы, вероятно, захотите запускать свою работу каждые 23 минуты, потому что это сумма времени выполнения вашего пакетного задания (й) и добавленного небольшого запаса прочности?

Вы можете либо упростить свои потребности в планировании, чтобы они могли работать с cron, то есть запускать задание каждые 30 минут, либо почти полностью отказаться от этого понятия планирования, управляемого временем, и исследовать планировщик, управляемый событиями.

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

Википедия предоставляет исчерпывающий список Программное обеспечение планировщика заданий или автоматизация рабочих нагрузок, как многие производители называют свои продукты.

запустите команду

crontab -e

Затем введите

2

если он запрашивает у вас редактор по умолчанию Затем введите

*/23 * * * * <command here>

запускать задание каждые 23 минуты. Замените 23 любым числом, которое хотите.