Насколько точен демон cron?
Планировщик заданий cron действительно точен?
Я имею в виду, что мне нужен сценарий для запуска каждую ночь как можно раньше, НО до 00:00 следующего дня.
В идеале я бы запустил работу cron в 23.59 (или в 23:59), но будет ли система действительно точной? Поскольку секунда имеет значение, я должен установить работу cron на 23:58, чтобы оставить ее на некоторое время?
4 ответа
Cron может гарантировать, что ваша работа начнется не раньше указанного времени (в зависимости от точности системных часов). Но нет никакой возможности дать вам какую-либо гарантию о времени прекращения работы. Это будет зависеть от множества факторов:
- Насколько загружена система
- Что делает работа
- Замедление из-за проблем с оборудованием
- Замедление из-за проблем с сетью (при условии, что работа зависит от сети)
Я рекомендую изменить ваш дизайн так, чтобы конкретное время выполнения не было обязательным.
Я полагаю, это зависит от вашего демона cron, но документация и стандарт указывают, что если вы укажете минуты, задание будет выполнено в указанную минуту.
Увидеть:
Имейте в виду, что ваш сценарий будет запущен, когда часы перейдут на правильное время, но завершится через некоторое время.
Обычно cron запускается в 23:59:00, проверяет все ваши файлы crontab, отфильтровывает те, которые имеют отношение к 23:59, а затем запускает их. Сканирование этих файлов происходит очень быстро, потому что их немного, и все они содержат всего несколько строк. Обычно cronjobs запускаются в 23:59:00 или 23:59:01. Есть верные способы намеренно замедлить этот процесс. (например, добавьте миллионы строк в crontab). Если система полностью перегружена, это тоже не будет работать так быстро.
Кроме того, это, очевидно, зависит от реализации.
Если вам нужно очень точное время запуска, лучше создать программу, которая спит до нужного вам времени, а затем запускается (например, с использованием C++11). Но в ОС, не работающей в реальном времени, это тоже будет не совсем точно! Также часы ПК не знают точное время!
Во всех случаях это только гарантирует, что программа запускается в (более или менее) время, которое вы хотите. Не может быть никакой гарантии, что программа завершится успешно до определенного времени, поэтому я твердо верю, что вам следует что-то изменить в этом требовании.
Это зависит от вашего общего времени выполнения скрипта и точности времени сервера.
59 23 * * * /some/script/file.sh
запустит ваш скрипт точно в 23:59, но если у вас есть какие-то команды, которые работают долго, часть скрипта может быть выполнена после полуночи.