Linux服务器时间同步配置:从排查到开机自动校时
Linux 服务器时间同步配置的核心目标,是让系统时钟长期跟随可靠的时间源,并在重启后自动恢复同步。
判断是否需要处理,先看 timedatectl 的输出:如果 System clock synchronized 为 no,或者时间与标准时间相差超过几秒,就应该配置 NTP 客户端。
本文以常见发行版为例,给出可直接执行的步骤,同时说明容易踩的坑。
先确认当前时间状态和可用工具
登录服务器后,先运行:
timedatectl
重点看三行:Local time 是否是你期望的时区时间,NTP service 是否处于 active,System clock synchronized 是否为 yes。
如果时区不对,先设置时区,例如:
sudo timedatectl set-timezone Asia/Shanghai
接着确认系统里安装了哪个时间同步服务。
常见组合有两种:较新的发行版默认使用 systemd-timesyncd,而很多服务器环境会安装功能更完整的 chrony。
用下面命令判断:
systemctl status chronyd 2>/dev/null | head -5
systemctl status systemd-timesyncd 2>/dev/null | head -5
不要同时启用两个 NTP 客户端,否则它们会争抢调整系统时钟,导致同步状态反复。
选一个即可:需要更细的监控和手动校时用 chrony;
只要求基础自动同步用 systemd-timesyncd。
使用 chrony 完成同步配置
chrony 适合大多数服务器场景,配置集中在 /etc/chrony.conf 或 /etc/chrony/chrony.conf。
先备份原文件:
sudo cp /etc/chrony.conf /etc/chrony.conf.bak
编辑配置文件,把默认的时间源替换为可用 NTP 服务器。
国内环境可参考以下写法,保留多个来源提高可用性:
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server time.cloudflare.com iburst
iburst 表示启动时快速发送一组请求,加快首次同步。
保存后重启服务并设为开机自启:
sudo systemctl restart chronyd
sudo systemctl enable chronyd
如果系统启用了防火墙,需要放行 NTP 使用的 UDP 123 端口。
以 firewalld 为例:
sudo firewall-cmd --add-service=ntp --permanent
sudo firewall-cmd --reload
使用 ufw 的环境则执行:
sudo ufw allow 123/udp
使用 systemd-timesyncd 的轻量方案
如果系统没有 chrony,且只需要基础同步,可以检查 /etc/systemd/timesyncd.conf。
取消 NTP= 行的注释并写入服务器:
[Time]
NTP=ntp.aliyun.com ntp1.aliyun.com
FallbackNTP=time.cloudflare.com
然后启动并启用服务:
sudo systemctl restart systemd-timesyncd
sudo systemctl enable systemd-timesyncd
这个方案配置简单,但不提供 chrony 那样的详细偏移统计。
如果后续需要排查时间漂移原因,再换成 chrony 更合适。
验证同步是否真正生效
配置完成后不要只看服务是否 running,要确认时钟已经同步。
运行:
timedatectl
当 System clock synchronized 显示 yes,说明同步成功。
使用 chrony 时还可以查看时间源状态:
chronyc sources -v
chronyc tracking
chronyc tracking 中的 System time 表示本机与参考源的偏差,正常应在毫秒级。
刚配置完可能还需要几十秒到几分钟收敛,可以稍等再查。
容易踩的坑和排查思路
时间仍然不准:先确认没有两个 NTP 服务同时运行。
用 systemctl status 检查 chronyd 和 systemd-timesyncd,停掉不需要的那个。
显示同步但偏差很大:如果系统时间与真实时间相差过多,某些服务会拒绝大幅跳变。
可以先停止 NTP 服务,手动校准一次,再启动:
sudo systemctl stop chronyd
sudo chronyd -q 'server ntp.aliyun.com iburst'
sudo systemctl start chronyd
防火墙或云安全组拦截:NTP 走 UDP 123,除了系统防火墙,还要检查云厂商安全组是否放行出方向。
如果服务器无法访问外网 NTP,可以改用内网时间源或自建 NTP 服务。
虚拟机时间漂移:部分虚拟化环境建议安装增强工具,并确认宿主机时间正常。
仅靠 NTP 客户端未必能完全消除漂移。
常见疑问
配置后需要重启服务器吗?
不需要。
启动并 enable 服务后,重启会自动同步;
当前会话中等待服务完成同步即可。
可以只用 IP 不用域名吗?
可以,但域名能在服务商切换 IP 时保持可用。
建议同时配置多个来源,避免单点故障。
同步会不会影响正在运行的服务?
正常的小幅校时不会。
如果时间偏差很大,首次同步可能产生跳变,建议在业务低峰期处理,并提前确认依赖时间的应用是否有特殊要求。