Linux时间同步需选chrony(现代系统默认)、设国内NTP源、校准时区与硬件时钟,确认chronyc tracking偏差<50ms且sources有*,防火墙放行UDP123端口。

Linux 系统时间同步不是配完就一劳永逸的事,关键在于选对工具、设对源、确认状态。现代发行版(RHEL 8+/CentOS 8+、Ubuntu 20.04+)默认推荐 chrony,它比传统 ntpd 启动快、适应网络波动强、对虚拟机和间歇连接更友好;只有老系统或特定需求才用 ntpd;临时校准可用 ntpdate 或 timedatectl。
确认并设置正确时区与硬件时钟
时间不准,往往第一步就错了:时区不对或硬件时钟未同步。
- 检查当前时区:
timedatectl | grep "Time zone",确认输出含Asia/Shanghai(CST);若不是,执行:sudo timedatectl set-timezone Asia/Shanghai - 查看系统时间与硬件时间是否一致:
date和hwclock -r;若偏差大,先用sudo hwclock --systohc将系统时间写入硬件时钟(避免重启后归零) - 确保硬件时钟模式为 UTC(推荐):
timedatectl status中应显示RTC in local TZ: no;如为 yes,执行sudo timedatectl set-local-rtc false
优先使用 chrony 进行持续同步
chrony 是当前主流选择,配置简单、响应快、收敛稳。
- 安装:
sudo yum install -y chrony(CentOS/RHEL)或sudo apt install -y chrony(Debian/Ubuntu) - 编辑配置:
sudo nano /etc/chrony.conf,清空或注释掉原有server行,添加国内可靠源(至少2个):server ntp.aliyun.com iburstserver time1.tencentyun.com iburst - 启用服务:
sudo systemctl enable --now chronyd - 立即校准一次(跳过等待):
sudo chronyc makestep - 验证:
chronyc tracking查看 Offset(当前偏差,理想<50ms),chronyc sources -v确认目标服务器前有*(正在使用)
备选方案:使用 systemd-timesyncd(轻量级)
如果你只需要基础客户端功能(不需高精度、不跑虚拟机),systemd 自带的 timesyncd 足够且更省资源。
- 启用:
sudo timedatectl set-ntp true - 指定国内 NTP 源(可选):
sudo nano /etc/systemd/timesyncd.conf,取消注释并修改:NTP=cn.pool.ntp.org time1.aliyun.com - 重启服务:
sudo systemctl restart systemd-timesyncd - 检查状态:
timedatectl status,确认 “System clock synchronized: yes”
防火墙与常见问题排查
服务启动了≠真同步,常因端口或权限被拦。
- NTP 使用 UDP 123 端口,必须放行:
CentOS/RHEL:sudo firewall-cmd --permanent --add-port=123/udp && sudo firewall-cmd --reload
Ubuntu:sudo ufw allow 123/udp - 如果
chronyc sources显示^?或无响应,先 ping 目标 NTP 服务器,再 telnet -untp.aliyun.com 123(需安装 inetutils-ping/telnet)测试连通性 - 时间偏差过大(>1000秒)时,chronyd 默认拒绝同步,需先执行
chronyc makestep强制校准 - 避免 ntpd 和 chronyd 同时运行——查状态:
systemctl is-active ntpd和systemctl is-active chronyd,冲突时停用前者:sudo systemctl disable --now ntpd


















