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

相关推荐
好好学习啊天天向上11 小时前
C盘容量不够,python , pip,安装包的位置
linux·python·pip
二十雨辰11 小时前
[python]-循环语句
服务器·python
li_wen0111 小时前
文件系统(八):Linux JFFS2文件系统工作原理、优势与局限
大数据·linux·数据库·文件系统·jffs2
wypywyp11 小时前
2.虚拟机一直显示黑屏,无法打开,可能是分配的硬盘空间不够
linux·运维·服务器
SongYuLong的博客12 小时前
TL-WR710N-V2.1 硬改刷机OpenWRT源码编译固件
linux·物联网·网络协议
m0_7373025812 小时前
碳足迹精准计量,华为FusionSolar助力云服务器绿色运维
服务器
AlfredZhao12 小时前
Docker 快速入门:手把手教你打包 Python 应用
linux·docker·podman
HIT_Weston13 小时前
107、【Ubuntu】【Hugo】搭建私人博客:模糊搜索 Fuse.js(三)
linux·javascript·ubuntu
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.13 小时前
Haproxy会话保持:基于Cookie优化
运维·负载均衡
艾莉丝努力练剑13 小时前
【优选算法必刷100题】第007~008题(双指针算法):三数之和、四数之和问题求解
linux·算法·双指针·优选算法