我认为有两种解决方案可以让我机器上的时间保持同步。一种是运行 NTP 服务,另一种是ntpdate
将其放入 crontab 中定期运行。
这就是我的理解 - 它正确吗?如果是,哪种解决方案更好?
答案1
关于ntpdate
:
- 仅用于同步当时的时间。运行后将不再改变时间。
- 限制与一个远程对等点进行同步。
- 不考虑系统时钟造成的偏差。
关于ntp
(服务):
- 检查多个远程对等点。
- 能够检查提供错误时间的远程对等点。它们将被忽略。运行
ntpq -p
以列出远程对等点,然后“分数”(+
,-
,*
)ntp
给出分数。 - 将跟踪机器的时间并以非常小的增量调整时间来补偿系统时钟造成的偏差。
- 不应用较大的偏移。如果您的系统时钟关闭了几个小时,
ntp
则不会触及它。请参阅无法使用 NTP 同步时间
结论:ntpdate
第一次使用系统时使用(如果您已连接到互联网,则由 Ubuntu 安装程序完成),然后ntp
正确配置,它应该会让您的时钟保持同步。我认为这是最好的选择。
答案2
最好的解决方案是运行ntpd
或ntpclient
。这两个程序都会不断调整您的时钟以保持同步。我的时钟通常与最佳时间源相差几毫秒。开销非常低,一旦实现同步,每 1024 秒(或更长时间)只有一个查询。使用 GPS 或无线电源,即使断开与互联网的连接也可以使用它们。
ntpdate
可用于执行首次时间同步,尽管较新版本的守护进程也会执行此步骤。 ntpdate
对于调试对时间服务器的访问以及发现时间源很有用。我使用它来验证我的路由器或 DNS 服务器是否提供了良好的时间源。
当我需要两台或多台服务器同步时钟时,我会使用ntpd
并同步这些服务器。即使断开连接,您也可以在一台或三台服务器上启用本地时钟,并让它们选择最佳时间源。
守护进程可以提供良好的日志来验证时间源的质量以及同步效果。如果您伪造了stratum
硬件时钟,则可以提供备用时间源,并记录其跟踪实际情况的效果。
答案3
我同意上述答案,但在大多数情况下,让普通用户或服务器运行完整的 NTP 服务器/服务/守护程序是过度的。
为什么要安装额外的系统软件?如果 Ubuntu 系统能够设置系统时间(见下一段)就足够了,那么对于普通用户所需的大多数同步来说,这已经足够了。
除非你的系统时钟经常关闭(就像我的一些机器一样)或者你需要非常全天候精确计时,每次启动网络接口时都会进行同步(参见/etc/network/if-up.d/ntpdate
:)。
如果您确实偶尔需要系统时钟更新,但又不想运行完整的 NTPd 服务,那么使用 NTPd 来ntpdate
在需要时更新系统也没什么不妥。我通过 cron 来执行此操作。您可能希望使用 ntpdate 每小时(或每天)执行一次 root crontab 或 crond:
sudo nano /etc/cron.hourly/synctime
笔记: 调用的脚本的文件名run-parts
不应包含扩展名或奇数字符。如果是这种情况,您的脚本将不会被选中。我选择上面的单个小写名称(“synctime” - 无扩展名)。
然后将其添加到该脚本中:
#!/bin/sh
/usr/sbin/ntpdate -s 192.168.1.1 # < local or remote (name or IP) for NTP server here
保存。然后使之可执行:
sudo chmod 755 /etc/cron.hourly/synctime
每小时 ntpdate 都会同步到您选择的服务器。(我的默认 cron.hourly 时间是在整点后约 17 分钟处理的)...除了界面启动时(通常是系统重启后启动时)完成的系统默认同步之外。
我个人ntpd
在我的主 Ubuntu 服务器上运行服务器(与互联网上的精确 ntp 服务器池保持同步),然后通过ntpdate
上述方式为我的所有 LAN 机器提供数据,作为客户端。这样,我的 LAN 就可以使用 Ubuntu 的默认 ntpdate 实用程序从一个本地点同步。