立即获取上次 timedatectl 同步其时间/强制同步的时间

立即获取上次 timedatectl 同步其时间/强制同步的时间

我有一个 Ubuntu 服务器,它与实际时间不同步一分多钟。当我运行 timedatectl 时,我得到:

Local time: Tue 2018-04-24 14:47:57 MDT
Universal time: Tue 2018-04-24 20:47:57 UTC
RTC time: Tue 2018-04-24 20:47:57
Timezone: America/Denver (MDT, -0600)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
          Sun 2018-03-11 01:59:59 MST
          Sun 2018-03-11 03:00:00 MDT
Next DST change: DST ends (the clock jumps one hour backwards) at
          Sun 2018-11-04 01:59:59 MDT
          Sun 2018-11-04 01:00:00 MST

我的理解是应该使用NTP同步。 ntp 可能无法正常工作。如果我运行 ntpq -p 我得到:

remote           refid      st t when poll reach   delay   offset  jitter
======================================================================
propjet.latt.ne .INIT.          16 u    - 1024    0    0.000    0.000   0.000
time-a-g.nist.g .INIT.          16 u    - 1024    0    0.000    0.000   0.000
linode227395.st .INIT.          16 u    - 1024    0    0.000    0.000   0.000
dev.smatwebdesi .INIT.          16 u    - 1024    0    0.000    0.000   0.000
pugot.canonical .INIT.          16 u    - 1024    0    0.000    0.000   0.000

有没有办法知道上次同步的时间以及来自哪个服务器。另外,我现在如何强制同步来解决问题(我知道我可以手动设置日期,但我不会完全正确,而且我想实际修复同步)。

答案1

检查状态

自 Ubuntu 16.04 起,作为 systemd 一部分的 timesyncd 现在负责(开箱即用)同步日期/时间。您可以使用以下命令检查其状态systemctl

$ systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
           └─disable-with-time-daemon.conf
   Active: active (running) since Sun 2018-08-05 10:14:44 EDT; 11min ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 3714 (systemd-timesyn)
   Status: "Synchronized to time server 108.59.2.24:123 (0.debian.pool.ntp.org)."
   CGroup: /system.slice/systemd-timesyncd.service
           └─3714 /lib/systemd/systemd-timesyncd

Aug 05 10:14:44 pi-hole systemd[1]: Starting Network Time Synchronization...
Aug 05 10:14:44 pi-hole systemd[1]: Started Network Time Synchronization.
Aug 05 10:14:45 pi-hole systemd-timesyncd[3714]: Synchronized to time server 108.59.2.24:123 (0.debian.pool.ntp.org).

或者通过journalctl

$ journalctl -u systemd-timesyncd
-- Logs begin at Thu 2016-11-03 13:16:42 EDT, end at Sun 2018-08-05 10:20:01 EDT. --
Aug 05 10:14:44 pi-hole systemd[1]: Starting Network Time Synchronization...
Aug 05 10:14:44 pi-hole systemd[1]: Started Network Time Synchronization.
Aug 05 10:14:45 pi-hole systemd-timesyncd[3714]: Synchronized to time server 108.59.2.24:123 (0.debian.pool.ntp.org).

您还可以观看systemd/clock

$ stat /var/lib/systemd/clock
  File: /var/lib/systemd/clock
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: b302h/45826d    Inode: 18750       Links: 1
Access: (0644/-rw-r--r--)  Uid: (  100/systemd-timesync)   Gid: (  103/systemd-timesync)
Access: 2018-08-05 10:22:13.838262405 -0400
Modify: 2018-08-05 10:22:13.838262405 -0400
Change: 2018-08-05 10:22:13.838262405 -0400
 Birth: -

该文件的访问/修改/更改时间显示 systemd-timesynd 最后一次触及它的时间。

强制同步

似乎没有任何方法可以直接强制同步。重新启动systemd-timesyncd服务实际上会触发重新同步:

$ systemctl restart systemd-timesyncd

您可以在日志中看到这一点:

$ journalctl -u systemd-timesyncd
-- Logs begin at Thu 2016-11-03 13:16:42 EDT, end at Sun 2018-08-05 10:44:37 EDT. --
Aug 05 10:14:44 pi-hole systemd[1]: Starting Network Time Synchronization...
Aug 05 10:14:44 pi-hole systemd[1]: Started Network Time Synchronization.
Aug 05 10:14:45 pi-hole systemd-timesyncd[3714]: Synchronized to time server 108.59.2.24:123 (0.debian.pool.ntp.org).
Aug 05 10:44:37 pi-hole systemd[1]: Stopping Network Time Synchronization...
Aug 05 10:44:37 pi-hole systemd[1]: Stopped Network Time Synchronization.
Aug 05 10:44:37 pi-hole systemd[1]: Starting Network Time Synchronization...
Aug 05 10:44:37 pi-hole systemd[1]: Started Network Time Synchronization.
Aug 05 10:44:37 pi-hole systemd-timesyncd[4157]: Synchronized to time server 208.75.88.4:123 (0.debian.pool.ntp.org).

最后一行来自我的重新启动。

控制间隔

systemd-timesyncd您可以通过配置文件中的这些属性来控制轮询 NTP 服务器的时间间隔/etc/systemd/timesyncd.conf

   PollIntervalMinSec=, PollIntervalMaxSec=

   The minimum and maximum poll intervals for NTP messages. Each setting takes a time 
   value (in seconds). PollIntervalMinSec= must not be smaller than 16 seconds. 
   PollIntervalMaxSec= must be larger than PollIntervalMinSec=. PollIntervalMinSec= 
   defaults to 32 seconds, and PollIntervalMaxSec= defaults to 2048 seconds.

上述内容似乎是在 2017 年底添加的 -timesync:使轮询间隔可配置#7268

参考

答案2

@slm 中有很多好信息回答,但它似乎是 Debian 特定的,并且 OP 想知道 Ubuntu 上上次同步时间的时间。 22.04 上的最佳选项似乎是以下两个文件之一lsstat

/var/lib/systemd/timesync/clock
/run/systemd/timesync/synchronized

这将给出最后一次同步时间,但这可能只会每 30 或 40 分钟更改一次。

如果您只是运行systemctl status systemd-timesyncd.service我的系统,则会给出“与时间服务器初始同步”的状态,而不是“与时间服务器同步”的状态,这没有帮助,并且让您想知道系统是否只同步一次。

journalctl -u systemd-timesyncd仅显示上次启动期间发生的情况,甚至可能不会显示。

请注意,OP 的评论是

对我来说,ntp 无法工作的原因是防火墙阻止了 NTP 所需的高编号端口上的传出流量

确实没有意义。在现代系统上,timedatectl不需要任何显式打开的端口,因为防火墙能够识别 NTP,并且可以跟踪对端口 123 的 UDP 响应。在我刚刚检查过的一个系统上,防火墙正在阻止 UDP 123 上的传入数据包(来自任意 IP 地址),但 NTP 是仍在更新。

相关内容