Chrony:通用-替换国内 NTP 源进行时间同步


一、 常用国内 NTP 服务器

不同 Linux 发行版的 Chrony 配置文件路径并不统一(如 CentOS 位于 /etc/chrony.conf,而 Ubuntu 位于 /etc/chrony/chrony.conf),且默认时间源的写法各异(poolserver,后缀带 iburst)。

选择几个不同的服务器作为时间源可以提高可靠性。以下是常用的国内 NTP 服务器 :

提供商 服务器地址 说明
阿里云 ntp.aliyun.com ntp1.aliyun.com ntp2.aliyun.com ntp3.aliyun.com ntp4.aliyun.com 阿里云提供的公共NTP服务,稳定可靠。
腾讯云 ntp.tencent.com time1.cloud.tencent.com time2.cloud.tencent.com time3.cloud.tencent.com time4.cloud.tencent.com time5.cloud.tencent.com 腾讯云提供的公共NTP服务。
国家授时中心 ntp.ntsc.ac.cn 210.72.145.44 中国科学院国家授时中心提供的权威时间服务。
教育网 cn.pool.ntp.org s1a.time.edu.cn s1b.time.edu.cn (清华大学) s1c.time.edu.cn (北京大学) s1d.time.edu.cn (东南大学) 覆盖中国教育网的NTP服务器池。
云服务商 各大云服务商(如华为云、百度智能云等)通常也提供内网或公网NTP服务 如果你的服务器部署在公有云上,优先使用云服务商提供的NTP服务,通常性能和稳定性最佳。

二、 一键替换脚本

将以下代码直接复制到 Shell 终端中执行即可。脚本会自动完成备份、注释旧源、追加国内源、重启服务的全过程。

bash 复制代码
# 1. 自动识别配置文件路径 (兼容 CentOS/RHEL 和 Debian/Ubuntu)
CHRONY_CONF="/etc/chrony.conf"
[ ! -f "$CHRONY_CONF" ] && CHRONY_CONF="/etc/chrony/chrony.conf"

# 2. 备份配置文件 (带时间戳,确保安全)
cp "$CHRONY_CONF" "${CHRONY_CONF}.bak_$(date +%Y%m%d_%H%M%S)"

# 3. 注释旧源 (正则匹配: 行首无# + 含pool/ntp + 结尾是iburst)
sed -i -E '/^[^#].*(pool|ntp).*iburst$/s/^/# /' "$CHRONY_CONF"

# 4. 追加新源 (如果不存在则追加,防止重复)
if ! grep -q "server ntp.aliyun.com iburst" "$CHRONY_CONF"; then
  cat >> "$CHRONY_CONF" << EOF
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
pool cn.pool.ntp.org iburst
server 210.72.145.44 iburst
server time1.cloud.tencent.com iburst
EOF
fi

# 5. 重启服务并生效
systemctl restart chronyd && systemctl enable chronyd && echo "✅ 已替换为国内源并重启服务"

脚本核心逻辑解析

  • 正则匹配 /^[^#].*(pool|ntp).*iburst$/
    • ^[^#]:排除以 # 开头的已注释行,防止重复注释。
    • .*(pool|ntp).*:同时匹配包含 poolntp 关键字的行,顺序不限。
    • iburst$:强制匹配行尾,确保只处理带 iburst 参数的时间源。
  • 配置源选择 :优先使用阿里云和多节点的 .pool.ntp.org,配合国家授时中心 IP,确保高可用性。

三、 踩坑指南:服务启动失败排查

执行上述脚本后,若出现 Job for chronyd.service failed 错误,通常不是配置语法错误,而是环境冲突。请按以下顺序排查。

1. 端口冲突(最常见)

若系统曾安装过 ntp 服务,它会占用 UDP 123 端口。

检查:

bash 复制代码
ss -lunp | grep 123

解决: 停止并禁用 ntpd

bash 复制代码
systemctl stop ntpd
systemctl disable ntpd
systemctl start chronyd

2. DHCP 动态配置冲突

AlmaLinux/CentOS 默认启用 sourcedir /run/chrony-dhcp,若 DHCP 下发的配置异常,会导致服务崩溃。

解决: 编辑配置文件注释该行。

bash 复制代码
sed -i 's/^sourcedir/#sourcedir/' /etc/chrony.conf
systemctl restart chronyd

3. 不可见字符编码错误

直接复制粘贴配置时,可能混入特殊字符。

解决: 删除手动添加的行,使用脚本自动追加,或使用 sed 命令清理文件末尾重新写入。

四、 验证同步状态

配置完成后,必须确认时间源已生效。重点关注输出中的 ^* 符号。

命令:

bash 复制代码
chronyc sources -v

成功输出示例:

复制代码
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp.aliyun.com                2   6   377    25   -2345us[ -2345us] +/-   38ms
^+ ntp1.aliyun.com               2   6   377    26    +456us[  +456us] +/-   42ms
  • ^*:当前正在同步的主源。
  • ^+:备用源。

查看系统时间状态:

bash 复制代码
timedatectl

确保输出包含 System clock synchronized: yes

相关推荐
旖旎夜光5 小时前
Linux(13)(中)
linux·网络
威迪斯特6 小时前
CentOS图形化操作界面:理论解析与实践指南
linux·运维·centos·组件·图形化·桌面·xserver
一方热衷.6 小时前
在线安装对应版本NVIDIA驱动
linux·运维·服务器
独自归家的兔6 小时前
ubuntu系统安装dbswitch教程 - 备份本地数据到远程服务器
linux·运维·ubuntu
m0_694845576 小时前
tinylisp 是什么?超轻量 Lisp 解释器编译与运行教程
服务器·开发语言·云计算·github·lisp
ONE_SIX_MIX6 小时前
ubuntu 24.04 用rdp连接,桌面黑屏问题,解决
linux·运维·ubuntu
龙飞056 小时前
Systemd -systemctl - journalctl 速查表:服务管理 + 日志排障
linux·运维·前端·chrome·systemctl·journalctl
*小海豚*6 小时前
在linux服务器上DNS正常,但是java应用调用第三方解析域名报错
java·linux·服务器
June`6 小时前
muduo项目排查错误+测试
linux·c++·github·muduo网络库
春日见6 小时前
如何创建一个PR
运维·开发语言·windows·git·docker·容器