
У меня запущен cronjob, который проверяет наличие обновлений на сервере, устанавливает их одно за другим, а затем проверяет, нужна ли перезагрузка. Если нужна перезагрузка, скрипт выполнит перезагрузку reboot
сервера.
Аппаратные часы используются во время загрузки. Требуется минута, прежде чем будут использованы системные часы.
До переключения на системные часы журналы показывают, что сервер отстает примерно на час. Когда сервер переключается с аппаратных часов на системные, журналы перескакивают примерно на час вперед, что запускает демон cron, который замечает, что время для скрипта обновления сервера уже прошло, и выполняет его снова.
Что запускает цикл перезагрузки, поскольку скрипт должен был выполняться только один раз в неделю.
Выполнение hwclock --systohc
синхронизирует системные часы с аппаратными часами, но это не постоянно. После перезагрузки разница во времени снова исчезает.
Мой вопрос:
Как мне навсегда синхронизировать системные часы с аппаратными часами?
выход timedatectl status
:
Local time: Tue 2018-08-28 12:05:37 CEST
Universal time: Tue 2018-08-28 10:05:37 UTC
RTC time: Tue 2018-08-28 10:05:37
Time zone: n/a (CEST, +0200)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: yes
DST active: yes
Last DST change: DST began at
Sun 2018-03-25 01:59:59 CET
Sun 2018-03-25 03:00:00 CEST
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2018-10-28 02:59:59 CEST
Sun 2018-10-28 02:00:00 CET
Warning: The system is configured to read the RTC time in the local time zone.
This mode can not be fully supported. It will create various problems
with time zone changes and daylight saving time adjustments. The RTC
time is never updated, it relies on external facilities to maintain it.
If at all possible, use RTC in UTC by calling
'timedatectl set-local-rtc 0'.
- CentOS Linux релиз 7.5.1804 (ядро)
- Это VPS-сервер.
- Европа/Амстердам
решение1
В соответствии с вашей timedatectl status
:
- Ваши аппаратные часы (RTC) установлены на время UTC (
RTC time
), - Ваша система настроена на оценку аппаратных часов как местного времени (
RTC in local TZ
).
В результате при загрузке системные часы устанавливаются на один час позже (ваш часовой пояс без учета летнего времени).
От man hwclock
:
Системы POSIX, такие как Linux, спроектированы так, чтобы системные часы работали в шкале времени UTC.
Вы можете легко исправить это, выполнив:
timedatectl --adjust-system-clock set-local-rtc 0
Корень всех зол в том, что RTC не запоминает TZ, который он установил. Обратите внимание, что эта RTC time
строка не имеет указания TZ. Когда вы храните время в аппаратной части, а TZ в файле ( /etc/adjtime
как@mr.spuratic(как отмечено), легко потерять синхронизацию между двумя данными.
Для полноты картины, IMHO, единственная ситуация, в которой следует сохранять локальные аппаратные часы, — это машина с двойной загрузкойОкна.