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

Перенос задания cron

Есть ли способ настроить задание cron для запуска с интервалом в один час и одну минуту? E. g. 12:00, 13:01, 14:02, 15:03 и так далее до бесконечности. Когда он снова вернется в 12 часов, он должен выполнить задание в 12:24, а следующее - в 13:25.

Попробуйте команду at.

at +61m < commands.list

commands.list: doupdate.sh в + 61m <commands.list

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

Вы можете запустить "atq", чтобы просмотреть, что в данный момент стоит в очереди.

Проверять, выписываться fcron который доступен в большинстве дистрибутивов и больше подходит для такого рода задач.

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

Лучшим вариантом было бы изучить инструменты планирования задач, доступные на используемом вами языке. По сути, вам нужен процесс, который знает состояние предыдущего запуска задачи, особенно время последнего успешного выполнения. Да, это приведет к тому, что в фоновом режиме будет работать дополнительный демон, но, вероятно, будет проще поддерживать этот хакерский способ реализовать то же самое в cron.

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

Один из способов сделать это, как предложил @cjc, - запустить дополнительный демон, который сам обрабатывает планирование.

Другой способ - вести учет времени выполнения задания; и каждый раз, когда Cron запускает его, отказываться от запуска, если последний запуск был слишком недавним. Это может быть так же просто, как прикоснуться к файлу с именем «lastrun» в конце каждого успешного выполнения, а затем проверить временную метку этого файла в начале следующего выполнения. Затем вы можете настроить запуск задания cron каждые несколько минут; в большинстве случаев он заметит, что разница во времени слишком мала, и немедленно выйдет.