Ein Server mit abgedrifteter Uhr erzeugt Fehler, die nach allem aussehen, nur nicht nach einer Uhr: Zertifikate, die "noch nicht gültig" sind, Anmeldungen, die mit richtigem Passwort scheitern, Cronjobs zur falschen Stunde. Es lohnt sich, das früh auszuschließen, denn es kostet einen Befehl.
timedatectl
Die Synchronisierung einschalten
timedatectl set-ntp true
timedatectl show -p NTPSynchronized --value
Drei Uhren, drei Einstellungen
- Das System - lassen Sie es auf UTC. Dann ist jedes Log und jeder gespeicherte Zeitstempel eindeutig.
- PHP - date.timezone, das beeinflusst, was date() ausgibt, und sonst nichts.
- MySQL - hat eine eigene time_zone, die NOW() und CURRENT_TIMESTAMP beeinflusst.
date
php -r 'echo date("Y-m-d H:i:s T"), PHP_EOL;'
mysql -e "SELECT NOW(), @@global.time_zone, @@session.time_zone;"
Schreibt PHP einen Zeitstempel in Ortszeit und speichert MySQL in UTC, ist jeder Vergleich um den Versatz daneben - und auffallen tut es nur zweimal im Jahr, wenn sich der Versatz ändert. Speichern Sie UTC und rechnen Sie bei der Anzeige um.
Was kaputtgeht, wenn die Uhr falsch geht
- TLS. Ein ab morgen gültiges Zertifikat wird heute abgelehnt. Die Browsermeldung nennt das Zertifikat, nicht die Uhr.
- Tokens und Zwei-Faktor. Ein TOTP-Code leitet sich aus der Zeit ab; mehr als dreißig Sekunden daneben, und jeder Code ist falsch.
- Cron. Jobs laufen zur falschen Stunde, oder doppelt, oder über eine Umstellung hinweg gar nicht.
- Logs zusammenlesen. Zwei Server, die Minuten auseinanderliegen, lassen sich überhaupt nicht gemeinsam lesen.
Stellen Sie das System auf UTC und ändern Sie es nie. Zeigen Sie Menschen die Ortszeit im letztmöglichen Moment - im Browser, aus deren eigener Uhr.