Chrony Force Sync in Linux

Tech reviewed: Deepak Prasad
Chrony Force Sync in Linux

When a Linux host drifts after reboot, a VM pause, or manual clock changes, you usually want a Chrony force sync right away—not a slow slew over many minutes. This guide puts force sync first (chronyc makestep and chronyd -q), then shows how to check Chrony sync status, configure Chrony as an NTP client or server on RHEL, CentOS, and Ubuntu, and read common chrony.conf options such as iburst, minpoll, and maxpoll.

Tested on: chrony 4.6.1 (chronyd -v); Ubuntu 25.04; kernel 6.14.0-37-generic.

The same commands work on RHEL 8/9, CentOS Stream, AlmaLinux, and Rocky Linux; paths and service names differ slightly and are called out below.


Force Chrony time sync

By default, chronyd slews the clock for small corrections. To jump the clock immediately, use one of these patterns.

Force sync while chronyd is running (chronyc makestep)

When chronyd is already running and has reachable sources, step the clock now:

bash
sudo chronyc makestep

If chronyd accepted the request, you should see a short confirmation like:

text
200 OK

That means chronyd will step the clock instead of waiting for the normal slew. Use this after large drift or when chronyc tracking still shows an offset you want cleared quickly. Be aware that a sudden step can confuse time-sensitive applications, so prefer a maintenance window on production nodes.

If chronyc reports 506 Cannot talk to daemon, start the service first (sudo systemctl start chronyd on RHEL, sudo systemctl start chrony on Ubuntu).

One-shot force sync (chronyd -q)

To sync once and exit—useful in scripts or when the daemon is stopped—run chronyd in query mode. It reads servers from your config file unless you pass an inline configuration string:

bash
sudo systemctl stop chronyd    # RHEL/CentOS: chronyd
# Ubuntu: sudo systemctl stop chrony

sudo chronyd -q

Or point at a pool or server directly:

bash
sudo chronyd -q 'pool pool.ntp.org iburst maxsources 4'
sudo chronyd -q 'server 192.168.1.10 iburst'

When sync succeeds, chronyd prints a line showing how far the clock was off, applies the correction, and exits. Your timestamps and offset will differ, but the log looks similar to:

text
2026-06-23T09:31:07Z chronyd version 4.6.1 starting (+CMDMON +NTP ...)
2026-06-23T09:31:13Z System clock wrong by 0.004855 seconds (step)
2026-06-23T09:31:13Z chronyd exiting

As you can see, a successful one-shot run ends with chronyd exiting after the (step) or (slew) line. Start the service again when you are done:

bash
sudo systemctl start chronyd    # RHEL/CentOS
# Ubuntu: sudo systemctl start chrony

Allow an initial step in chrony.conf (makestep)

Most distro packages ship a makestep line so the first few updates after boot can step large offsets. On Ubuntu and RHEL you will often find:

text
makestep 1 3

That means: if the correction is larger than one second, step the clock—but only for the first three updates. After that, chronyd slews unless you run chronyc makestep or use chronyd -q.


Check Chrony sync status

Start with timedatectl—it is the quickest yes/no for NTP on systemd systems:

bash
timedatectl status

Right after you enable NTP, before the first successful poll, you may still see:

text
Local time: Tue 2026-06-23 14:57:41 IST
           Universal time: Tue 2026-06-23 09:27:41 UTC
    System clock synchronized: no
              NTP service: active

Once Chrony has locked to a source, System clock synchronized should change to yes while NTP service stays active. If NTP is inactive, turn it on with:

bash
sudo timedatectl set-ntp yes

For more detail, run chronyc tracking. It shows which source you are using and whether the clock is considered in sync:

bash
chronyc tracking

When you are synchronized, look for Leap status: Normal and a real hostname or IP in Reference ID. If upstream servers are still unreachable, the leap line may read:

text
Leap status     : Not synchronised

To see which server Chrony selected, run chronyc sources -v. The current sync source is marked with ^*:

bash
chronyc sources -v

When your network can reach NTP servers, a healthy client looks similar to this (names and offsets vary by site):

text
MS Name/IP address         Stratum Poll Reach LastRx Last sample
    ===============================================================================
^* time.cloudflare.com           3   6   377    12   -245us[ -312us] +/-   22ms
^+ 162.159.200.1                 3   6   377    10  +1200us[+1200us] +/-   45ms

The ^* row is the server your clock is following. A full Reach value (often 377 in octal) means recent polls succeeded.

To count how many sources are usable, run:

bash
chronyc activity

You should see how many sources are online, for example:

text
200 OK
    4 sources online
    0 sources offline

On RHEL/CentOS, check the unit with systemctl status chronyd; on Ubuntu use systemctl status chrony.


Configure Chrony as NTP client

Install Chrony if it is not already on the system:

bash
# RHEL / CentOS / Rocky / Alma
sudo dnf install -y chrony
sudo systemctl enable --now chronyd

# Ubuntu / Debian
sudo apt install -y chrony
sudo systemctl enable --now chrony

For RHEL and CentOS, edit /etc/chrony.conf and add a minimal client layout like this:

text
pool pool.ntp.org iburst maxsources 4
driftfile /var/lib/chrony/drift
makestep 1 3
rtcsync

On Ubuntu and Debian, upstream pools may already live in /etc/chrony/sources.d/ (for example ubuntu-ntp-pools.sources). You can add a .sources file there or put pool lines in /etc/chrony/chrony.conf. The drift file path is often /var/lib/chrony/chrony.drift.

After you save the file, restart the service:

bash
sudo systemctl restart chronyd    # RHEL/CentOS
# Ubuntu: sudo systemctl restart chrony

Then confirm with timedatectl and chronyc sources -v. Your host needs outbound UDP port 123 to the NTP servers and working DNS or routing when you use pool hostnames.

To use one internal server instead of a public pool, replace the pool line with:

text
server 192.168.1.10 iburst
driftfile /var/lib/chrony/drift
makestep 1 3
rtcsync

Configure Chrony as NTP server

If a host already syncs to the internet, you can serve time to other machines on your LAN. On that server, add allow for the client subnet in chrony.conf (RHEL) or in chrony.conf / a file under /etc/chrony/conf.d/ (Ubuntu):

text
allow 192.168.0.0/24

Without allow, chronyd runs as a client only and does not answer NTP requests from the network.

If the server has no internet upstream but must still answer clients, some admins add local stratum 10—only when you accept serving time from an unsynchronised local clock.

Restart the service and allow UDP 123 through the host firewall.

On each client, point chrony.conf at the server IP:

text
server 192.168.0.113 iburst
    driftfile /var/lib/chrony/drift
makestep 1 3
    rtcsync

After you restart the client, run chronyc sources and look for ^* beside the server IP. chronyc tracking should list that same address as Reference ID.


Chrony server options explained

These options go on server or pool lines in chrony.conf (or Ubuntu .sources files):

Option Purpose
pool name iburst Resolve a pool hostname to several NTP servers; iburst sends up to four quick requests at startup so sync happens within seconds instead of waiting for the first long poll interval.
server ip-or-name iburst Use one NTP server; common for internal LAN servers.
minpoll N Minimum interval between requests as (2^N) seconds. If you omit it, the default is minpoll 6 (64 seconds) on RHEL 8, CentOS, and Ubuntu 22.04/24.04 with chrony 4.x.
maxpoll N Maximum interval (2^N) seconds. Default is 10 (1024 seconds).
makestep threshold limit Step if offset exceeds threshold seconds, but only for the first limit clock updates (package defaults are often makestep 1 3).
rtcsync Copy the system clock to the hardware RTC periodically so the clock survives reboots; keep this on unless you have a reason to disable it.
allow subnet Let NTP clients on that subnet query this host as a server.
driftfile path Store estimated clock drift between restarts.

You can combine poll tuning with a public pool like this:

text
pool pool.ntp.org iburst minpoll 6 maxpoll 10 maxsources 4

With iburst, the first packets still go out within about two seconds even when minpoll is 6—that is why boot-time sync feels fast while steady-state polling stays at 64 seconds or longer.


Common Chrony sync issues

System clock synchronized: no but NTP service is active

Wait 30–60 seconds after systemctl restart chronydiburst needs a few round trips. Run chronyc sources -v and check the Reach column (octal 377 means recent successful polls). If every source shows ? or Reach 0, your host cannot reach UDP 123 (firewall, routing, or blocked outbound NTP).

506 Cannot talk to daemon

chronyd is not running. Start it with sudo systemctl start chronyd (RHEL) or sudo systemctl start chrony (Ubuntu).

chronyd -q exits with “No suitable source for synchronisation”

No NTP server responded—check DNS, outbound UDP 123, and the pool or server name in your -q argument or config file.

Wrong config file edited on Ubuntu

Ubuntu splits pools into /etc/chrony/sources.d/*.sources. Editing only /etc/chrony/chrony.conf without checking sources.d is a common mistake. Run grep -r pool /etc/chrony/ to see which upstreams are active.

chronyc makestep returns OK but offset remains large

You may have no selected source (^* missing in chronyc sources). Fix upstream connectivity first; stepping without a reference does not set correct time.

Large step broke an application

Plan emergency steps in a maintenance window when you can. For recurring drift, fix VM or hypervisor time sync and keep rtcsync enabled.


Summary

To force Chrony time sync on RHEL, CentOS, or Ubuntu, use chronyc makestep while chronyd is running, or chronyd -q for a one-shot sync from chrony.conf or an inline pool/server line. Check status with timedatectl, chronyc tracking, and chronyc sources -v. Configure a client with pool or server, driftfile, makestep, and rtcsync; configure a server with allow for your subnet. Default minpoll is 6 (64 seconds) when unset; iburst still speeds up the first sync after boot. For timezone changes separate from NTP, see Ubuntu timezone setup.


Frequently Asked Questions

1. How do I force Chrony to sync time immediately?

With chronyd running, use chronyc makestep to step the clock now. For a one-shot sync without the service, stop chronyd and run chronyd -q with your pool or server line. On RHEL and Ubuntu, makestep 1 3 in chrony.conf also allows an initial step on the first few updates after boot.

2. How do I check if Chrony is synchronized?

Run timedatectl and look for System clock synchronized: yes and NTP service: active. Then use chronyc tracking for Leap status: Normal and chronyc sources -v to see which server is selected with ^*.

3. What is the default minpoll value in Chrony on Ubuntu 22.04?

If you do not set minpoll on a server or pool line, Chrony uses minpoll 6, which is 2^6 = 64 seconds between requests. maxpoll defaults to 10 (1024 seconds). Ubuntu 22.04 and RHEL 8/9 ship chrony 4.x with the same defaults documented in chrony.conf(5).

4. Where is the Chrony configuration file on RHEL vs Ubuntu?

On RHEL, CentOS, AlmaLinux, and Rocky Linux, edit /etc/chrony.conf and manage chronyd. On Ubuntu and Debian, the main file is /etc/chrony/chrony.conf and upstream pools often live under /etc/chrony/sources.d/; the systemd unit is usually named chrony.

5. Can I use Chrony as an NTP server for other hosts?

Yes. Add allow with your client subnet in chrony.conf on the server, open UDP port 123, restart chronyd or chrony, and point clients at server YOUR_SERVER_IP iburst. Use local stratum 10 only when the server has no external sources and you accept serving time from an unsynchronised local clock.
Deepak Prasad

R&D Engineer

Founder of GoLinuxCloud with over a decade of expertise in Linux, Python, Go, Laravel, DevOps, Kubernetes, Git, Shell scripting, OpenShift, AWS, Networking, and Security. With extensive experience, he excels across development, DevOps, …

  • Red Hat Certified System Administrator in Red Hat OpenStack
  • Certified Kubernetes Application Developer (CKAD)
  • Red Hat Certified Specialist in Ansible Automation
  • Go (programming language)
  • Python (programming language)
  • DevOps
  • Computer Security