一些背景信息

一些背景信息

我有两台 16.04 服务器。timedatectl两台机器上都显示网络时间已开启,NTP 已同步。两台机器都使用 UTC。然后我使用命令将日期设置为下个月的随机日期date

在第一台服务器上,后续调用date显示时间更改确实已生效。timedatectl还显示新日期。网络时间仍然开启,但 NTP 已同步 = 否。

在第二台服务器上,后续调用date不会显示新时间,也不会显示timedatectl。网络时间仍然打开,NTP 也同步。

这是怎么回事?应该怎么回事?

我在两台机器上都做了一个实验,ps -la | grep ntp看看是否有其他东西在管理时间,但是什么也没有出现。

接受新日期且不重新同步的机器正在虚拟盒中运行,但我安装了客户机附加组件,因此我认为它将与 NTP 同步兼容。我不确定另一台机器的详细信息 - 它是一台 Laravel Forge 机器。

答案1

你问了很多好问题,我会尽力回答,但我也建议你读一下这篇文章unix.stackexchange linux 上及时问答。它应该为您提供比您提出的具体问题更深入的背景信息。

一些背景信息

timedatectl是一个与之交互的程序systemd-timesyncd,它是由systemd。运行man timedatectl以获取程序的易读描述。例如,Network time on: yes仅表示systemd-timesyncd服务已启用。就是这样。

这也解释了为什么你看不到ps faux |grep ntp任何返回内容。内置的 ntp 客户端称为systemd-timesyncd

date是一个查询和操作系统日期和时间的程序。这是您的操作系统认为的当前时间。如果您使用参数运行此程序-s,它将允许您调整系统时间

关于您的样品机

机器-1您说的是一台运行 virtualbox 的机器。这样您就可以正常设置系统时钟(如果您愿意,甚至可以设置虚拟硬件时钟)。

您所描述的听起来很正常,您已将时钟偏差了一天,ntp 客户端将无法再正确同步。这就是该ntpdate命令在 ubuntu 中存在很长时间的原因,它是一次性命令,用于使时钟对齐,并将其交给 ntp 客户端。 systemd-timesyncd现在已内置此功能,但它仅在启动时运行,而不是一直运行。

机器-2你说的是Laravel Forge 教程机器。我不确定那具体是什么。如果你运行sudo date -s '2018-04-18 12:00:00',它允许你这样做吗?它说了什么?可能是你没有能力更改该服务器上的系统时钟。例如,它可能是某种容器(docker、lxd)。

答案2

在第二台服务器上(我无法更改日期),发布sudo timedatectl set-ntp off解决了该问题。稍后,当我想重新同步时间时,我会发布sudo timedatectl set-ntp on并等待片刻。这很有意义。

相关内容