一、 常用国内 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。