Fixing Time Synchronization

I recently noticed my Arch Linux system time was consistently 1 hour behind, despite having the correct timezone configured. Here’s how I fixed it using systemd’s built-in NTP client.

The Problem

My system showed the wrong time even though the timezone was correctly set to Europe/Berlin:

❯ date
Thu Feb 12 09:45:36 AM CET 2026

❯ stat /etc/localtime
File: /etc/localtime -> /usr/share/zoneinfo/Europe/Berlin

Checking the time sync status revealed the issue:

❯ timedatectl status
               Local time: Thu 2026-02-12 09:48:17 CET
           Universal time: Thu 2026-02-12 08:48:17 UTC
                 RTC time: Thu 2026-02-12 08:48:17
                Time zone: Europe/Berlin (CET, +0100)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no

The NTP service was inactive, meaning the system wasn’t synchronizing with any time servers.

The Solution

Step 1: Configure NTP Servers

Edit the systemd-timesyncd configuration file:

sudoedit /etc/systemd/timesyncd.conf

I configured German NTP pool servers for better accuracy and lower latency:

[Time]
NTP=0.de.pool.ntp.org 1.de.pool.ntp.org 2.de.pool.ntp.org 3.de.pool.ntp.org
#FallbackNTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org

Step 2: Enable and Start the NTP Service

# Restart the service to apply changes
sudo systemctl restart systemd-timesyncd.service

# Enable NTP synchronization
sudo timedatectl set-ntp true

Step 3: Verify the Fix

Check that everything is working:

❯ timedatectl status
               Local time: Thu 2026-02-12 08:49:38 CET
           Universal time: Thu 2026-02-12 07:49:38 UTC
                 RTC time: Thu 2026-02-12 07:49:38
                Time zone: Europe/Berlin (CET, +0100)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Perfect! The system clock is now synchronized and the NTP service is active.

Step 4: Check Sync Details

To see which NTP server you’re connected to and the sync status:

❯ timedatectl timesync-status
       Server: 88.99.101.252 (0.de.pool.ntp.org)
Poll interval: 1min 4s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 2
    Reference: ED11CC5F
    Precision: 1us (-24)
Root distance: 22.536ms (max: 5s)
       Offset: -3.401ms
        Delay: 22.195ms
       Jitter: 1.285ms
 Packet count: 2
    Frequency: +0.000ppm

The offset of -3.401ms shows the system is now properly synchronized with minimal drift.

Useful Commands

Here are some helpful commands for monitoring NTP status:

# Overall time/NTP status
timedatectl status

# Detailed sync status with NTP server info
timedatectl timesync-status

# Show all timesyncd settings
timedatectl show-timesync --all

# View sync logs
journalctl -u systemd-timesyncd -n 50

# Monitor sync attempts in real-time
journalctl -u systemd-timesyncd -f

Choosing NTP Servers

You can use different NTP server pools based on your location:

  • Germany: 0.de.pool.ntp.org through 3.de.pool.ntp.org
  • Europe: 0.europe.pool.ntp.org through 3.europe.pool.ntp.org
  • Global: 0.pool.ntp.org through 3.pool.ntp.org
  • Arch Linux: 0.arch.pool.ntp.org through 3.arch.pool.ntp.org

Using geographically closer servers generally provides better accuracy and faster sync times.

Conclusion

Time synchronization is crucial for many system functions, from file timestamps to SSL certificate validation. With systemd-timesyncd, keeping your Arch Linux system’s clock accurate is straightforward and requires minimal configuration.

The key steps are:

  1. Configure NTP servers in /etc/systemd/timesyncd.conf
  2. Restart the systemd-timesyncd service
  3. Enable NTP synchronization with timedatectl set-ntp true
  4. Verify with timedatectl status

Now my system clock stays accurate automatically!

my DevOps Odyssey

“Σα βγεις στον πηγαιμό για την Ιθάκη, να εύχεσαι να ‘ναι μακρύς ο δρόμος, γεμάτος περιπέτειες, γεμάτος γνώσεις.” - Kavafis’ Ithaka.