Linux 如何使ntpd在重新启动后立即同步?
我的应用程序必须在时间同步的服务器上运行。为此,我安装了Linux 如何使ntpd在重新启动后立即同步?,linux,ntp,Linux,Ntp,我的应用程序必须在时间同步的服务器上运行。为此,我安装了ntpd,并检查ntpstat的返回值。从ntpstat获取零返回值似乎需要很长时间,尤其是在重新启动后。为什么ntpd要花这么长的时间才能同步,我怎样才能在重新启动后几秒钟进行同步?要在重新启动后立即同步ntp,ntpdate必须在ntpd之前运行 要在systemd中执行此操作,可以运行 systemctl-a | grep ntp 查看是否已启用ntpdate。要启用它,只需运行 systemctl启用ntpdate 对于使用lsb脚
ntpd
,并检查ntpstat
的返回值。从ntpstat
获取零返回值似乎需要很长时间,尤其是在重新启动后。为什么ntpd
要花这么长的时间才能同步,我怎样才能在重新启动后几秒钟进行同步?要在重新启动后立即同步ntp
,ntpdate
必须在ntpd
之前运行
要在systemd中执行此操作,可以运行
systemctl-a | grep ntp
查看是否已启用ntpdate。要启用它,只需运行
systemctl启用ntpdate
对于使用lsb
脚本的Linux,可以通过chkconfig
启用ntpdate
chkconfig ntpdate on
是,正如发现的那样-启动脚本调用ntpd.service,它等待运行ntpdate.service
。
虽然ntpdate不是服务,而是应用程序—它通过位于/usr/libexec/ntpdate wrapper
的尼斯包装脚本运行一次,该脚本正在检查条件,其中一个条件—如果有服务器,请参见/etc/ntp/step tickers
。如果是-它使用这些服务器调用ntpdate,fedora安装程序默认将其设置为0.fedoratime.smth.ininternet,这不适合封闭环境
因此有3种选择:
1.修改ntpdate包装器,他将首先查找ntp.conf
2.修改/etc/ntp/step tickers
以拥有自己的ntp服务器
3.修改ntpdate.service
以不调用包装器,而只调用命令并在其配置中添加/替换行:
[Service]
Type=oneshot
ExecStart=/usr/bin/ntpd -q -g -x
RemainAfterExit=yes
在启动
ntpd
之前运行ntpdate
。这通常在ntpd
的init
脚本中。有可能你的没有。不用说,当执行ntpdate
时,网络也应该启动。ntpd
的init
脚本是什么?我使用yum安装了它,唯一一个看起来像您所说的文件是/etc/ntp.conf
,但它没有开始和停止部分,所以我不确定需要在哪个文件中添加您建议的命令不同的Linux发行版使用不同的init脚本,有些甚至使用systemd
。您可以通过运行rpm-ql ntp
找到init脚本,它将显示包拥有的所有文件。在我的Linux中,它是/etc/init.d/ntpd
和/etc/init.d/ntpdate
。如果您使用的是lsb
脚本,chkconfig--list ntpd
和chkconfig--list ntpdate
将显示它们是否都设置为自动启动。如果您使用的是systemd
,那么systemd-a | grep ntp
将显示它们是否处于活动/非活动/启用/禁用状态。好的,我使用的是systemd,我在/usr/lib/systemd/system/
下找到了init文件。我仍然不确定具体如何操作,但我理解您的答案,我知道应该在哪里添加它。如果你把你的回答写成一个答案,我将能够接受它(如果它有效的话)。仅供参考:与其滚动你自己的检查时间同步的解决方案,你只需使用ntp参考实现中提供的ntp wait
apropos ntp wait:ntp wait-等待ntpd稳定系统时钟
。这也比您的ntpstat解决方案更具可移植性,因为它不依赖任何供应商提供的UTIL,如ntpstat。
请参阅我对相关问题的回答,这样您似乎不需要运行ntpdate
,而只需确保在引导后运行ntpd.service即可。我会接受你的回答,因为它有助于找到这个问题的根本原因。现在我有了问题的完整答案,让我首先说,确实需要调用ntpdate
问题是ntpd
用于同步的服务器和ntpdate.service
(/usr/libexec/ntpdate wrapper
)的用途不同。因此,如果在/etc/ntp.conf
中更改服务器,还需要更改/etc/ntp/step tickers
中的服务器。