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


一、 常用国内 NTP 服务器

不同 Linux 发行版的 Chrony 配置文件路径并不统一(如 CentOS 位于 /etc/chrony.conf,而 Ubuntu 位于 /etc/chrony/chrony.conf),且默认时间源的写法各异(pool 或 server,后缀带 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).*:同时匹配包含 pool 或 ntp 关键字的行,顺序不限。
    • 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。

相关推荐
by209991 天前
Linux 基础指令与文件操作
linux·1024程序员节
2401_868534781 天前
软考网络规划设计师SSL协议知识点详解
服务器·网络
Escalating_xu1 天前
【Linux 网络编程】手写序列化与反序列化:从 x op y 到能校验的文本协议
linux·运维·网络
润滑卫士1 天前
油液多参数融合故障诊断:数据级融合与决策级融合方法
运维
李纲明1 天前
WordPress 后台登录马上被踢回登录页:Cookie 域、HTTPS、盐值和页面缓存怎么查
运维·缓存·https·php·wordpress·cookie
todoitbo1 天前
在 Ubuntu ARM64 上运行 Q1 V3.0 MuJoCo 模型:加载、步进和单执行器响应
linux·运维·ubuntu·ai·机器人·仿真教程·启元
AR-26710-1 天前
Linux Day26——传输层与三次握手
linux·运维
隔窗听雨眠1 天前
PostgreSQL单表从Windows迁移到Linux:差异剖析、方案对比与全流程实战
linux·windows·postgresql
xinruoqianqiu1 天前
记录Linux
linux
额额额对了1 天前
嵌入式 Linux 实战:i.MX6ULL 上的 CAN 通信与摄像头采集
linux·运维·服务器