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

Насколько точен демон cron?

Планировщик заданий cron действительно точно?

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

В идеале я бы запустил задание cron в 23:59 (или 23:59), но будет ли система действительно точной? Поскольку секунда имеет значение, должен ли я установить задание cron на 23:58, чтобы оставить его на некоторое время?

Что может гарантировать 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, но, если у вас есть какие-то команды, которые работают долго, часть скрипта может быть выполнена после полуночи.