System time
System time on an Ubuntu Core 20+ device is set and updated over several potential steps, depending on network access and the availability of a real-time clock (RTC).
Regardless of how system time is set, it always moves forward monotonically and is never permitted to move backwards.
- Update process
- Current time
- Real time clock (RTC) check
- Setting a timezone
- Network time synchronisation
System time update process
The system time value and update process is tightly coupled to the boots process and device capabilities. From a fresh boot of the device, the process for setting the time is as follows:
-
initrd
When the device boots, initrd first moves system time forward to match the time initrd was built.-
snap-bootstrap
snap-bootstrap is the main executable run during the early initrd boot stage. It will itself move time forward to that of the most recent assertion it trusts, signed with Canonical’s key.
-
snap-bootstrap
-
user-space
After the snap environment is re-executed and the boot process moves to user-space, systemd’s timesyncd will attempt to update the system time:-
on devices with an RTC
System time is moved forward to match that of the on-board RTC. -
on devices without an RTC
System time is taken from the modified file timestamp (mtime) of/var/lib/systemd/timesync/clock
on the data partition (which may be encrypted). The timestamp for this file is updated periodically after a network connection has been established, and before the system reboots.
When the network becomes available, the device will begin to use NTP to periodically update the system time. See Network time synchronisation below for more details.
-
on devices with an RTC
Current time
The current system time and date can be retrieved with the timedatectl
command:
$ timedatectl
Local time: Mon 2022-03-14 12:23:24 UTC
Universal time: Mon 2022-03-14 12:23:24 UTC
RTC time: Mon 2022-03-14 12:23:25
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Real-time clock (RTC) check
If no real-time clock is present or accessible, the output from timedatectl will include RTC time: n/a
:
$ timedatectl
Local time: Mon 2022-03-14 12:23:24 UTC
Universal time: Mon 2022-03-14 12:23:24 UTC
RTC time: n/a
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Setting a timezone
The timezone can be configured with the system.timezone system value:
$ snap set system system.timezone="America/Chicago"
$ timedatectl | grep zone
Time zone: America/Chicago (CDT, -0500)
Network time synchronisation
By default, timesyncd is configured to use the Network Time Protocol (NTP) for network time synchronisation as soon as the network becomes available.
The NTP server and update frequency can be checked with timedatectl timesync-status:
$ timedatectl timesync-status
Server: 91.189.89.198 (ntp.myasnchisdf.eu.org)
Poll interval: 4min 16s (min: 32s; max 34min 8s)
Leap: normal
Version: 4
Stratum: 2
Reference: 11FD22FB
Precision: 1us (-23)
Root distance: 30.234ms (max: 5s)
Offset: +33.938ms
Delay: 14.975ms
Jitter: 37.394ms
Packet count: 4
Frequency: -14.982ppm