Запланированные Задания в течение часов осеннего изменения времени

sudo apt-get install apache2 postgresql-server

Вам, возможно, придется указать версию пост-ГРЭС, сделайте apt-cache search postgresql и найдите правильный пакет для своей версии.

12
задан 30 October 2013 в 22:19
3 ответа

Правильное планирование будущих задач по местному времени с учетом часовых поясов и перехода на летнее время - очень сложная тема. Я уже писал об этом раньше с точки зрения программирования на Stack Overflow здесь и здесь .

Я резюмирую с точки зрения непрограммирования:

  • Определите ваше повторение шаблоны по местному времени - не по UTC . Например, если вы установили ежедневный будильник, который будит вас в 8:00 каждый день, вы не захотите просыпаться на час раньше или на час позже после перехода на летнее время. Если я нахожусь в тихоокеанском часовом поясе США, я не могу запланировать 16:00 по всемирному координированному времени, потому что после перехода придется переключиться на 15:00 по всемирному координированному времени, чтобы сохранить то же самое 8:00 по местному времени.

  • Определите часовой пояс, в котором "местный" время представляет. Не предполагайте, что местный часовой пояс сервера совпадает с часовым поясом, который имеет значение для конечного пользователя.

  • Спроектируйте местное время на дату и время в формате UTC для каждого случая, когда вы хотите, чтобы событие запускалось.

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

    • В некоторых случаях вы можете захотеть также спроецировать следующие несколько (или множество) экземпляров, например следующие 5 экземпляров, или все экземпляры на следующий год. (Эта часть очень специфична для требований приложения.)

  • Имейте в наличии стратегию (фиксированную или настраиваемую) того, что делать в случае событий, выпадающих на время летнего времени ] transition:

    • Для перехода "пружина вперед", отсутствует местное время, когда событие может не существовать. Например, по тихоокеанскому времени США ежедневная задача, запускаемая в 2:00 утра по местному времени, не будет существовать 9 марта 2014 г. В большинстве случаев вы захотите увеличить это время на сумму экономии (обычно на 1 час ), поэтому в этот день он будет работать в 3:00 AM, но вернется к работе в 2:00 AM в следующем экземпляре. (Однако вполне возможно, что вам понадобится другая стратегия для этого.)

    • Для перехода «откат назад» существует перекрытие дублированного местного времени, когда событие могло бы существовать дважды . Например, в тихоокеанском времени США ежедневная задача, запускаемая в 1:00, будет иметь два возможных времени, когда она может выполняться 2 ноября 2014 г. В большинстве случаев вы Я захочу запустить первое наступление 1:00 AM PDT и пропустить следующее появление 1:00 AM PST той же даты. (Но опять же, вы могли захотеть другую стратегию, например, запуск во втором экземпляре или запуск в обоих. YMMV)

  • Будьте готовы пересчитать все ваши события в формате UTC раз, если вам когда-нибудь понадобится обновить данные о часовом поясе. IANA / Olson TZDB выпускает несколько обновлений каждый год, потому что правительства стран мира все время меняют свое мнение о смещении часовых поясов и правилах перехода на летнее время. Вы не можете предполагать в течение какого-либо определенного периода времени в будущем, что правила не изменятся .

    • Не забудьте подписаться на объявления о выпуске данных о часовых поясах, и иметь процесс для их применения в ваших системах и / или приложениях.

    • В традиционных корпоративных условиях это должно быть ответственностью ИТ-персонала.

    • В зависимости от вашей среды вы можете получать эти данные через tzdata обновления пакета linux через Java JRE или tzupdater , или любое количество других каналов. Иногда это зависит от среды, а иногда от конкретной платформы программирования, например, пакета PECL timezonedb для PHP и многих других.

    • Microsoft имеет собственные данные о часовых поясах. В Windows, если вы используете TimeZoneInfo из .NET (например), вы используете эти данные. Обновления поступают из здесь , а также автоматически отправляются через Центр обновления Windows, так что вы должны следить за ними, чтобы знать, когда / если вам нужно пересчитать.

  • С учетом всего этого, остается сценарием, в котором вы должны планировать только по UTC, и что предназначен для АБСОЛЮТНЫХ будущих событий. Примеры:

    • Задание, которое выполняется каждые X часов или каждые X минут.

    • Время начала и окончания восхода солнца или другое астрономическое явление.

    • Зависящее от времени окно безопасности, например, при передаче конфиденциальной информации другой стороне в заранее оговоренное время.


Планировщик заданий Windows

Windows не обязательно поступает правильно. Обратите внимание на то, как вы определяете триггер:

Windows Task Scheduler

Когда вы устанавливаете флажок «Синхронизировать по часовым поясам», тогда задача планируется только по UTC. (Все время по-прежнему отображается как местное время, но сохраняется в формате UTC. ) Итак, это то, что я ранее называл «абсолютным» событием.

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

Я не совсем уверен в его поведении на летнее время, но я поэкспериментирую и вернусь к вам по этому поводу. Вероятно, он делает то, что я описал выше, но не обязательно.


SQL Agent

Планировщик SQL Agent еще хуже, поскольку он только позволяет использовать время локального сервера. Опять же, нельзя указать часовые пояса, и вы также не можете указать UTC.

Он был запрошен , но не принят.

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

Я не совсем уверен в его поведении в летнее время, но я поэкспериментирую и вернусь к вам по этому поводу. Вероятно, он делает то, что я описал выше, но не обязательно.


SQL Agent

Планировщик SQL Agent еще хуже, поскольку он только позволяет использовать время локального сервера. Опять же, нельзя указать часовые пояса, и вы также не можете указать UTC.

Он был запрошен , но не принят.

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

Я не совсем уверен в его поведении на летнее время, но я поэкспериментирую и вернусь к вам по этому поводу. Вероятно, он делает то, что я описал выше, но не обязательно.


SQL Agent

Планировщик SQL Agent еще хуже, поскольку он только позволяет использовать время локального сервера. Опять же, нельзя указать часовые пояса, и вы также не можете указать UTC.

Он был запрошен , но не принят.

s DST, но я поэкспериментирую и вернусь к вам по этому поводу. Вероятно, он делает то, что я описал выше, но не обязательно.


SQL Agent

Планировщик SQL Agent еще хуже, поскольку он только позволяет использовать время локального сервера. Опять же, нельзя указать часовые пояса, и вы также не можете указать UTC.

Он был запрошен , но не принят.

s DST, но я поэкспериментирую и вернусь к вам по этому поводу. Вероятно, он делает то, что я описал выше, но не обязательно.


SQL Agent

Планировщик SQL Agent еще хуже, поскольку он только позволяет вам использовать время локального сервера. Опять же, нельзя указать часовые пояса, и вы также не можете указать UTC.

Он был запрошен , но не принят.

10
ответ дан 2 December 2019 в 21:37

Обычно не заботясь.

Задайте вопрос: «А что, если задача выполняется дважды?»

Как правило, это не имеет значения, поэтому вам не нужно Делать что-нибудь. Если это имеет значение, самое простое решение - перенести работу в нерабочее время, на которое влияет переход на летнее время.

1
ответ дан 2 December 2019 в 21:37

Как вы отметили, час между 1:00 и 2:00 повторяется в конце летнего времени; когда происходит обратное изменение (начало летнего времени), время между 2 и 3 часами ночи не происходит (и ваше задание не запускается). Лучшим вариантом будет

  • запустить расписание задания по всемирному координированному времени
  • запустить задание вне времени переключения (00:59 или 3:00)
1
ответ дан 2 December 2019 в 21:37

Теги

Похожие вопросы