The
systemd-timesyncd service appears inactive at boot on Debian 12 because it is a "oneshot" or transient unit that synchronizes time and then exits, rather than running as a persistent background daemon. To verify if it has successfully synchronized the system clock, you should check the status of the NTP service itself using the
timedatectl command, which provides a comprehensive view of time synchronization health regardless of the underlying service's active state.
Understanding Systemd-Timesyncd Behavior
It is crucial to understand that
systemd-timesyncd operates differently from traditional daemons like
sshd or
nginx. It does not stay resident in memory after performing its task. When you run
systemctl status systemd-timesyncd, seeing an "inactive (dead)" status immediately after boot is normal behavior. The service runs briefly during the initialization phase to query NTP servers and adjust the system clock, then terminates. This design reduces resource usage and potential security exposure by keeping the network-dependent component short-lived.
If you are concerned about time accuracy, the presence of this service in the boot sequence is sufficient. It ensures that the hardware clock is corrected before most other services start, preventing issues with certificate validation, logging timestamps, and distributed system coordination. The "inactive" status simply means the work is done, not that it failed.
Verifying Time Synchronization Status
Instead of checking the service status, use the
timedatectl utility to see if time synchronization is actually working. This tool queries the kernel’s timekeeping subsystem and reports whether the system clock is synchronized via NTP.
Run the following command in your terminal:
timedatectl status
Look for the line labeled "System clock synchronized". If it says "yes", your time is correctly synced, and there is no issue. You can also check "NTP service" to see if the NTP subsystem is enabled. If "System clock synchronized" is "no", but you have internet connectivity, the issue lies elsewhere, such as network availability during boot or firewall rules blocking NTP ports.
Checking Specific Service Logs
If you suspect the service did not run at all, you can inspect its journal logs. Use the following command to view recent entries:
journalctl -u systemd-timesyncd.service --since "1 hour ago"
This will show you if the service started, which servers it contacted, and whether it received valid responses. Errors here might indicate DNS resolution failures or unreachable NTP servers.
Common Causes for Failure
If
timedatectl shows that the clock is not synchronized, several factors could be preventing
systemd-timesyncd from functioning correctly.
- Network Availability: If the network interface is not up when the service starts, it cannot reach NTP servers. Ensure your network manager is configured to bring up connections early in the boot process.
- DNS Resolution:
systemd-timesyncd relies on DNS to resolve NTP server hostnames. If DNS is unavailable at boot, synchronization fails. Check /etc/resolv.conf or your network configuration for proper DNS settings.
- Firewall Rules: Outbound UDP port 123 must be open for NTP traffic. Some strict firewall configurations may block this port during the initial boot phase.
- Virtualization Constraints: In some virtual environments, the host machine manages time, and guest OS time sync may be disabled or overridden by hypervisor tools.
Alternative Solutions and Best Practices
For most desktop and standard server deployments,
systemd-timesyncd is the recommended solution due to its simplicity and integration with systemd. However, if you require more robust time synchronization, especially in complex network environments, consider using
chrony or
ntpd.
To switch to
chrony, install the package and enable its service:
sudo apt install chrony
sudo systemctl enable --now chronyd
Chrony is often better suited for systems with intermittent network connections or virtual machines, as it can maintain accurate time even without constant network access.
If you are managing a headless server or embedded device where minimal dependencies are critical, stick with
systemd-timesyncd but ensure your network configuration is reliable. For detailed troubleshooting, you might also want to review how your bootloader interacts with the system, as seen in guides on
BIOS won't recognize bootloader issues, which can sometimes affect early boot services.
Ensuring Persistent Configuration
Sometimes, users try to force the service to stay active by modifying unit files, which is not supported and can lead to unexpected behavior. Instead, focus on ensuring the prerequisites for the service are met. Verify that your network connection is established before the service attempts to sync. You can also set the default NTP servers in
/etc/systemd/timesyncd.conf if the default public servers are inaccessible in your region.
[Time]
NTP=pool.ntp.org
Server=time.google.com
FallbackNTP=ntp.ubuntu.com
After editing, reload the daemon and restart the service to apply changes:
sudo systemctl daemon-reload
sudo systemctl restart systemd-timesyncd
Remember, the goal is successful synchronization, not a permanently active service unit. Checking
timedatectl remains the gold standard for verifying time health on Debian 12.
Frequently Asked Questions
Why does systemctl timesyncd show inactive even when time is correct?
This is expected behavior because the service is designed to run once and exit after syncing the clock. It does not remain a long-running daemon. As long as
timedatectl shows the clock is synchronized, the service performed its job correctly.
How do I check if my system clock is synchronized via NTP?
Use the command
timedatectl status. Look for the line "System clock synchronized: yes". If it says "no", your time is not being updated by an NTP source, and you should investigate network or DNS issues.
Can I make systemd-timesyncd run continuously?
No, it is not designed to run continuously. Attempting to modify its unit file to keep it active is unsupported and may cause system instability. If you need continuous monitoring and correction, switch to a full NTP client like
chrony or
ntpd.
What should I do if timedatectl shows time is not synchronized?
First, verify that your network interface is up and has internet access. Then, check if DNS resolution works. Finally, inspect the journal logs with
journalctl -u systemd-timesyncd for specific error messages regarding server reachability or authentication failures.
Is it safe to disable systemd-timesyncd?
Yes, it is safe to disable if you plan to use another time synchronization service like
chrony. However, if you disable it without replacing it, your system clock will drift over time, potentially causing issues with SSL certificates and log analysis.