System time is only synced when I manually restart chronyd

I have a relatively fresh installation of Fedora 37 with the KDE spin on my laptop. For some reason the network time syncing doesn’t work out of the box. I have added the following to the /etc/chrony.conf in order to have at least one server:

pool 2.fedora.pool.ntp.org iburst

My system time keeps being off. When I restart chronyd, it will sync and set the time. But it doesn’t do that on its own.

● chronyd.service - NTP client/server
     Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; preset: enabled)
     Active: active (running) since Wed 2023-03-22 21:26:29 CET; 47min left
       Docs: man:chronyd(8)
             man:chrony.conf(5)
    Process: 330036 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
   Main PID: 330039 (chronyd)
      Tasks: 1 (limit: 18731)
     Memory: 1.1M
        CPU: 51ms
     CGroup: /system.slice/chronyd.service
             └─330039 /usr/sbin/chronyd -F 2

Mär 22 21:26:29 mu-t14 chronyd[330039]: chronyd version 4.3 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 +DEBU>
Mär 22 21:26:29 mu-t14 chronyd[330039]: Frequency 0.748 +/- 0.263 ppm read from /var/lib/chrony/drift
Mär 22 21:26:29 mu-t14 chronyd[330039]: Using right/UTC timezone to obtain leap second data
Mär 22 21:26:29 mu-t14 chronyd[330039]: Loaded seccomp filter (level 2)
Mär 22 21:26:29 mu-t14 systemd[1]: Started chronyd.service - NTP client/server.
Mär 22 21:26:35 mu-t14 chronyd[330039]: Selected source fd00::3681:c4ff:fe18:b00f
Mär 22 21:26:35 mu-t14 chronyd[330039]: System clock wrong by -3027.602282 seconds
Mär 22 20:36:08 mu-t14 chronyd[330039]: System clock was stepped by -3027.602282 seconds
Mär 22 20:36:08 mu-t14 chronyd[330039]: System clock TAI offset set to 37 seconds
Mär 22 20:37:12 mu-t14 chronyd[330039]: Selected source 192.168.188.1

This is the full config:

❯ cat /etc/chrony.conf
# These servers were defined in the installation:
server _gateway iburst

server _gateway iburst

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
pool 2.fedora.pool.ntp.org iburst

# Use NTP servers from DHCP.
sourcedir /run/chrony-dhcp

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Require authentication (nts or key option) for all NTP sources.
#authselectmode require

# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys

# Save NTS keys and cookies.
ntsdumpdir /var/lib/chrony

# Insert/delete leap seconds by slewing instead of stepping.
#leapsecmode slew

# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

It feels very weird that a fresh installation doesn’t have a working network time sync. What I can do to get this fixed?

Make sure to resolve race conditions if you want to use _gateway as your NTP server:

sudo mkdir -p /etc/systemd/system/chronyd.service.d
sudo tee /etc/systemd/system/chronyd.service.d/custom.conf << EOF > /dev/null
[Unit]
After=systemd-resolved.service
Wants=systemd-resolved.service
EOF
sudo systemctl daemon-reload
sudo systemctl restart chronyd.service

Or just comment out those lines:

sudo sed -i -e "/^server\s/s/^/#/" /etc/chrony.conf
sudo systemctl restart chronyd.service

You also might check the output of timedatectl.
If system time is set to local and RTC is also set the same then chrony may have difficulty.
The default time settings should be RTC the same as UTC and system time set by the time zone.

An example of a properly set time

$ timedatectl
               Local time: Wed 2023-03-22 15:31:37 CDT
           Universal time: Wed 2023-03-22 20:31:37 UTC
                 RTC time: Wed 2023-03-22 20:31:37
                Time zone: America/Chicago (CDT, -0500)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no