Wie synchronisiere ich die Systemuhr dauerhaft mit der Hardwareuhr?

Wie synchronisiere ich die Systemuhr dauerhaft mit der Hardwareuhr?

Ich habe einen Cronjob laufen, der nach Server-Updates sucht, diese nacheinander installiert und dann prüft, ob ein Neustart erforderlich ist. Wenn ein Neustart erforderlich ist, führt das Skript rebootden Server aus.

Die Hardwareuhr wird beim Booten verwendet. Es dauert eine Minute, bevor die Systemuhr verwendet wird.

Vor der Umstellung auf die Systemuhr zeigen die Protokolle, dass der Server etwa eine Stunde zurückliegt. Wenn der Server von der Hardware- auf die Systemuhr umschaltet, springen die Protokolle etwa eine Stunde nach vorne, wodurch der Cron-Daemon ausgelöst wird. Dieser bemerkt, dass die Zeit für das Server-Update-Skript bereits abgelaufen ist, und führt es erneut aus.

Dies löst eine Neustartschleife aus, da das Skript nur einmal pro Woche ausgeführt werden sollte.

Durch das Ausführen hwclock --systohcwird die Systemuhr mit der Hardwareuhr synchronisiert, dies ist jedoch nicht dauerhaft. Nach einem Neustart ist der Zeitunterschied wieder aufgehoben.

Meine Frage ist

Wie synchronisiere ich die Systemuhr dauerhaft mit der Hardwareuhr?

Ausgabe von 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 Version 7.5.1804 (Core)
    • Dies ist ein VPS-Server.
  • Europa/Amsterdam

Antwort1

Entsprechend deinem timedatectl status:

  • Ihre Hardware-Uhr (RTC) ist auf UTC-Zeit eingestellt ( RTC time),
  • Ihr System ist so eingestellt, dass Ihre Hardware-Uhr als lokale Zeit ausgewertet wird ( RTC in local TZ).

Dies hat zur Folge, dass Ihre Systemuhr beim Booten eine Stunde nachgestellt wird (Ihre Zeitzone ohne Sommerzeit).

Aus man hwclock:

POSIX-Systeme wie Linux sind so konzipiert, dass die Systemuhr im UTC-Zeitrahmen arbeitet.

Sie können das Problem ganz einfach beheben, indem Sie Folgendes ausführen:

timedatectl --adjust-system-clock set-local-rtc 0

Die Wurzel allen Übels ist, dass RTC sich nicht an die eingestellte TZ erinnert. Beachten Sie, dass diese RTC timeZeile keine TZ-Angabe hat. Wenn Sie die Zeit in einem Hardwareteil und die TZ in einer Datei speichern ( /etc/adjtimewie@herr.spuraticWie bereits erwähnt, kann die Synchronisierung zwischen den beiden Informationen leicht verloren gehen.

Der Vollständigkeit halber sei erwähnt, dass meiner Meinung nach die einzige Situation, in der die Hardware-Uhr auf lokal eingestellt bleiben sollte, ein Dual-Boot-Rechner mitWindows.

verwandte Informationen