一些有用的命令

以下是一些有用的命令,可用于解决与 chrony 相关的问题。

# chronyc tracking  
# chronyc sources
# chronyc sourcestats
# systemctl status chronyd
# chronyc activity
# timedatectl

尝试通过输入其 IP 地址仅设置一台 NTP 服务器

如果到目前为止我们一直在使用两个或者多个 NTP 服务器(因为它们已设置或者因为我们输入了一个在不同 IP 地址中解析的 FQDN),请尝试通过仅输入一个 IP 地址来设置一个 NTP 服务器。
这可能会解决 NTP 相关问题。

只有 chrony 设置时间的时间

当 chrony 服务启动时,/etc/chrony/chrony.conf 文件中有一些设置告诉它在特定条件发生时实际设置时间:

# Force system clock correction at boot time.
makestep 1000 10

这意味着如果 chrony 在其开始后的前 10 次测量中检测到时间偏离超过 1000 秒,它将设置时钟。

时间日志

有几个 chrony 日志可用于排除故障。
它们中的大多数位于 /var/log/chrony/ 。
请注意,最新文件并不总是 *.log 文件。
有时甚至 *.log.2 或者 *.log.3 文件也是更新的文件。
以下是按最新排序列出文件的示例:

# ls -lisaht  /var/log/chrony/
total 1.5M
3801115 580K -rw-r--r--  1 root root 574K Oct 21 14:56 measurements.log.3
3801131 544K -rw-r--r--  1 root root 540K Oct 21 14:56 statistics.log.3
3801166 356K -rw-r--r--  1 root root 350K Oct 21 14:56 tracking.log.3
3801089 4.0K drwxr-xr-x 16 root root 4.0K Oct 21 00:01 ..
3801114 4.0K drwxr-xr-x  2 root root 4.0K Oct 21 00:01 .
3801128    0 -rw-r--r--  1 root root    0 Oct 21 00:01 tracking.log
3801110    0 -rw-r--r--  1 root root    0 Oct 21 00:01 measurements.log
3801120    0 -rw-r--r--  1 root root    0 Oct 21 00:01 statistics.log
3801167    0 -rw-r--r--  1 root root    0 Oct 20 00:01 tracking.log.1
3801165    0 -rw-r--r--  1 root root    0 Oct 20 00:01 statistics.log.1
3801159    0 -rw-r--r--  1 root root    0 Oct 20 00:01 measurements.log.1
............
CentOS/RHEL 7:解决 NTP/chrony 问题的技巧

chrony 服务不改变时间
通常的误解是 chrony 服务将时间设置为 NTP 服务器提供的时间。
这是不正确的 - 实际发生的是基于 NTP 服务器的回答,chrony 只是告诉系统时钟走得更快或者更慢。
因此,有时即使时间错误且 NTP 服务器正在工作,时间也不会立即得到更正。

检查 chronyd 状态

要检查 chronyd 守护进程的状态:

# systemctl status -l chronyd
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2016-08-12 13:22:22 IST; 1s ago
  Process: 33263 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
  Process: 33259 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 33261 (chronyd)
   CGroup: /system.slice/chronyd.service
           └─33261 /usr/sbin/chronyd
Aug 12 13:22:22 NVMBD1S11BKPMED03 systemd[1]: Starting NTP client/server...
Aug 12 13:22:22 NVMBD1S11BKPMED03 chronyd[33261]: chronyd version 2.1.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +DEBUG +ASYNCDNS +IPV6 +SECHASH)
Aug 12 13:22:22 NVMBD1S11BKPMED03 chronyd[33261]: Frequency 0.000 +/- 1000000.000 ppm read from /var/lib/chrony/drift
Aug 12 13:22:22 NVMBD1S11BKPMED03 systemd[1]: Started NTP client/server.

跟踪与 NTP 服务器的通信

要仔细检查 NTP 服务器是否正在应答,可以在监视服务器的同时跟踪 chrony 和 NTP 服务器之间的流量一段时间:

  1. 使用 NTP 端口 123 上的 tcpdump 启动 pcap 跟踪并保持运行直到问题出现(在“屏幕”或者“nohup”中运行它以避免在与 shell 命令断开连接时它被停止)
  2. 一旦问题再次出现,请获取涵盖整个历史记录的系统诊断,因为我们已将服务器设置为 DNS 名称,直到再次出现间隙。
    如果这会产生一个太大的文件,只需获取当前数据的系统诊断,另外复制 /var/log/chrony/ 中的所有文件,以及所有名为 /var/log/syslog* 的文件。
    记住停止我们在第 1 步开始的跟踪

chronyc 源命令

运行 chronyc sources -v 显示系统中配置的 NTP 服务器的当前状态。
这是一个示例输出,其中 ntp.example.com 显示为在线的有效服务器:

# chronyc sources -v
210 Number of sources = 1
  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = OK for sync, '?' = unreachable,
| /                'x' = time may be in error, '~' = time is too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||                                                /   xxxx = adjusted offset,
||         Log2(Polling interval) -.             |    yyyy = measured offset,
||                                              |    zzzz = estimated error.
||                                   |           |                         
MS Name/IP address           Stratum Poll LastRx Last sample
============================================================================
^* ntp.example.com          3    6     40    +31us[  -98us] +/-  118ms

请注意,与“*”不同的源状态通常表示 NTP 服务器有问题。

源状态'~'表示时间变化太大
如果 Source 状态为 '~ ',则可能意味着服务器可以访问但时间变化太大。
如果服务器响应太慢或者响应有时较慢有时较快,则可能会发生这种情况。
我们可以检查 ping 对服务器的响应时间,以查看它们是否缓慢或者可变。
当服务器在太慢导致计时问题的虚拟机上运行时,也会注意到这种状态。

之路教程 https://onitr oad .com

Chrony 检查并每小时重新启动

chrony 服务每小时检查一次 chronyc sources -v 命令的输出,通过运行脚本 /usr/sbin/palladion_chrony_healthcheck 运行 /usr/sbin/palladion_check_chrony 并检查其输出:

  • 如果 /usr/sbin/palladion_check_chrony 返回 1 - 这意味着没有在线源(没有源状态 = '*'),因此 chrony 重新启动以尝试重新初始化服务器状态
  • 如果 /usr/sbin/palladion_check_chrony 返回 0 - 这意味着一切正常,chrony 不需要重新启动,因为它已经有一个有效的在线资源
# cat /etc/cron.d/chrony
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#
# Check chrony every hour and restart if necessary.
#
16 * * * *     root    /usr/sbin/palladion_chrony_healthcheck
日期:2020-09-17 00:12:07 来源:oir作者:oir