Изменяет ли crond летнее время на +1 час?

16

В прошлые выходные нам пришлось менять время с 02:00 до 03:00.

Вопрос: Что бы произошло, если бы в 02:30 был cronjob?

Crond - очень старое решение для планирования, вероятно, оно должно с этим справиться, но не знаю как.

LoukiosValentine79
источник

Ответы:

18

Вероятно, это зависит от вашей реализации cron, но популярный vronie cron утверждает в руководстве:

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

и

Особые соображения существуют, когда часы меняются менее чем на 3 часа, например, в начале и в конце летнего времени. Если время сместилось вперед, те задания, которые выполнялись бы во время, которое было пропущено, будут запущены вскоре после изменения. И наоборот, если время переместилось назад менее чем на 3 часа, те задания, которые попадают в повторяющееся время, не будут перезапущены.

Это влияет только на задания, которые выполняются в определенное время (не указывается как @hourly или как «*» в указателе часов или минут). Задания, которые указываются с подстановочными знаками, запускаются немедленно по новому времени.

Поскольку изменение летнего времени составило менее 3 часов, ваша программа запустится вскоре после 3:00.

Я не уверен, что это специфическое поведение Vixie cron, я, кажется, вспоминаю, как так работал мой PDP-11 еще в 80-х, но я не уверен.

Энтон
источник
2
Вау, знания из 80-х - снимаю шляпу!
Исаак
эмпирическое правило: раз в год ваши кроны в этом часовом диапазоне не будут бегать. раз в год ваши кроны будут бегать дважды. следствие: это не всегда так. связанные: прекратите использовать местные часовые пояса!
tedder42
@ tedder42, пожалуйста, предоставьте ссылки, ваши претензии противоречат как документации, так и фактическому поведению cron.
Anthon
Этот случайный случай ссылается на 2 и 3 часа ночи и не имеет отношения к вопросу (который относится к 2:30) вечера. Ваши ссылки могут быть интересным (старым) поведением, это не соответствует моему опыту. И запуск сервера без часового пояса имеет свои проблемы.
Anthon
2

Лучшее решение состоит в том, чтобы ваш компьютер работал с аппаратными часами, установленными на UTC, (Всемирное координированное время), AKA GMT или Zulu Time, и измените только способ отображения времени, установив местный часовой пояс, чтобы разрешить переход на летнее время. время взять на себя

В SUSE Linux и, возможно, в большинстве других, если для Hardware Clock System -> Environment -> Clock -> HWCLOCK установлено значение UTC с флагом -u, а часовой пояс установлен там, где вы находитесь, система будет автоматически отображать местное время. с исправлениями DST для вас.

Это имеет ряд преимуществ:

  • Вам никогда не придется вручную настраивать часы для изменений летнего времени
  • Вкладки CRON будут храниться и выполняться в UTC
  • Если файл, например, журнал, записывается в 01:30 до окончания летнего времени, а другой - в 01:20 после окончания летнего времени, этот файл все равно будет «новее», чем другой, поскольку временные метки файла будут UTC и только что переведен для отображения на основе текущего часового пояса на время отображения.

Для получения дополнительной информации введите man hwclockв терминале.

Стив Барнс
источник
2
Незначительный придурок. UTC не является «универсальной постоянной времени». UTC означает Всемирное координированное время
fpmurphy,