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

相关推荐
深耕半夜14 小时前
debug函数
linux·运维·服务器
一叶星殇14 小时前
ASP.NET Core 后端如何通过 Nginx 获取真实客户端 IP 完整指南
服务器·tcp/ip·nginx
赵民勇14 小时前
Qt项目缺少Quick模块错误解决方案
linux·qt
爱吃大芒果14 小时前
openJiuwen在Ubuntu上的安装教程
linux·运维·ubuntu
回忆是昨天里的海14 小时前
docker compose-语法
运维·docker·容器
BIBI204914 小时前
CentOS 7 安装 MySQL 5.7
linux·mysql·centos·配置·环境搭建·安装教程·服务器运维
oMcLin14 小时前
如何在 Red Hat Linux 服务器上使用 Ansible 自动化部署并管理多节点 Hadoop 集群?
linux·服务器·ansible
草莓熊Lotso14 小时前
Python 库使用全攻略:从标准库到第三方库(附实战案例)
运维·服务器·汇编·人工智能·经验分享·git·python
不会c嘎嘎14 小时前
mysql -- 使用CAPI访问mysql服务器
服务器·数据库·mysql