【问题标题】:How to make ntpd synchronized immediately after reboot?重启后如何使ntpd立即同步?
【发布时间】:2021-11-05 16:54:16
【问题描述】:

我的应用程序必须在时间同步的服务器上运行。为此,我安装了ntpd 并检查了ntpstat 的返回值。从ntpstat 获得零返回值似乎需要很长时间,尤其是在重新启动之后。为什么ntpd 需要这么长时间才能同步?如何在重启后几秒内实现同步?

【问题讨论】:

  • 在启动 ntpd 之前运行 ntpdate <server>。这通常在ntpdinit 脚​​本中。你的可能没有。不用说,在执行ntpdate 时,网络也应该是正常的。
  • ntpdinit 脚本是什么?我使用 yum 安装了它,唯一看起来像你所说的文件是 /etc/ntp.conf 但它没有开始和停止部分所以我不确定我需要在哪个文件中添加你建议的命令
  • Linux 的不同发行版使用不同的初始化脚本,有些甚至使用systemd。您可以通过运行rpm -ql ntp 找到初始化脚本,它将显示包拥有的所有文件。在我的 Linux 中,它是 /etc/init.d/ntpd/etc/init.d/ntpdate。如果您使用lsb 脚本,chkconfig --list ntpdchkconfig --list ntpdate 将显示它们是否都设置为自动启动。如果您使用的是systemd,那么systemd -a | grep ntp 将显示它们是否处于活动/非活动/启用/禁用。
  • 好的,我正在使用 systemd,我在/usr/lib/systemd/system/ 下找到了初始化文件如果您将您的回复写为答案,我将能够接受它(如果可行的话)。
  • 仅供参考:您可以使用 ntp 引用实现中提供的ntp-wait,而不是滚动您自己的检查时间同步的解决方案。 apropos ntp-wait: ntp-wait - Wait for ntpd to stabilize the system clock。这也比您的 ntpstat 解决方案更便携,因为它不依赖于任何供应商提供的实用程序,例如 ntpstat.

标签: linux ntp


【解决方案1】:

是的,因为它被发现 - 启动脚本调用 ntpd.service,它等待 ntpdate.service 运行。 虽然 ntpdate 不是服务,而是应用程序 - 它通过位于 /usr/libexec/ntpdate-wrapper 的漂亮包装脚本运行一次,它正在检查条件,其中之一 - 如果有任何服务器,在 /etc/ntp/step-tickers 中描述。如果是 - 它使用这些服务器调用 ntpdate,默认情况下由 fedora 安装程序设置为 0.fedoratime.smth.ininternet ,这不适合封闭环境。

所以有 3 个选择: 1. 修改ntpdate wrapper,他会首先寻找ntp.conf 2.修改/etc/ntp/step-tickers拥有自己的ntp服务器 3. 修改ntpdate.service 不调用包装器,而只是调用命令,在其配置中添加/替换行:

[Service]
Type=oneshot
ExecStart=/usr/bin/ntpd -q -g -x
RemainAfterExit=yes

【讨论】:

    【解决方案2】:

    要在重启后立即同步ntpntpdate 必须在ntpd 之前运行。

    要在 systemd 中执行此操作,您可以运行

    systemctl -a | grep ntp

    查看是否启用了 ntpdate。要启用它,只需运行

    systemctl enable ntpdate

    对于使用lsb 脚​​本的Linux,您可以通过chkconfig 启用ntpdate

    chkconfig ntpdate on

    【讨论】:

    • 请查看我对相关问题的回答stackoverflow.com/questions/22779584/… 所以看来您不需要运行ntpdate,只是为了确保 ntpd.service 在启动后运行。我会接受你的回答,因为它有助于找到这个问题的根本原因。
    • 现在我有了完整的答案,我先说确实需要调用ntpdate 问题是ntpd 用于同步的服务器和@987654334 使用的服务器@(/usr/libexec/ntpdate-wrapper) 用途不一样。因此,如果您更改了/etc/ntp.conf 中的服务器,您还需要更改/etc/ntp/step-tickers 中的服务器。
    【解决方案3】:

    在 2021-05-07-raspios-buster-armhf-lite

    没有 ntp 二进制文件,也没有 ntpd。

    我有一个安装脚本需要在第一次启动后运行。我也有这些同步问题。为了确保我的安装脚本等待时间同步,我这样做了:

    STATE="no_time_sync"
    
    while [ $STATE != "yes" ]; do
            # Check the current ntp sync status
            STATE=$(timedatectl status | grep "System clock synchronized" | awk '{print $4}')
    
            # Sleep for 3 seconds and wait for ntp sync
            sleep 3
    
    done
    
    echo "System clock synchronized"
    

    对我来说就像一个魅力:

    May 07 16:00:34 raspberrypi setup[534]: Waiting for internet connection
    May 07 16:00:39 raspberrypi setup[534]: Internet connection
    Nov 05 08:32:32 raspberrypi setup[534]: System clock synchronized
    

    至少在这个 Raspbian 版本中,我不太确定是否可以提升同步。设置以太网接口以接入互联网已经需要一些时间。并且默认情况下已经启用了ntp服务。不过,我可以减少循环期间的睡眠时间。等待互联网和等待时钟同步的睡眠时间为 3 秒。 ;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      • 2011-04-04
      相关资源
      最近更新 更多