Linux系统同步网络时间最直接的方法就是使用ntpdate命令指向国内NTP服务器,或者配置chrony服务实现长期自动校准。前者适合一次性手动同步,后者适合服务器长期稳定运行,这两条路径覆盖了绝大多数linux怎么同步网络时间服务器时间同步的场景。
先搞清楚你的Linux系统需要哪种时间同步方式
很多人在配服务器的时候会遇到一个困惑:明明执行了同步命令,过几天时间又偏了,这通常不是命令没生效,而是没搞清楚一次性同步和持续同步的区别。
一次性手动同步适合刚装完系统、或者发现时间偏差较大时立刻校正。持续自动同步适合跑业务的生产服务器,系统会每隔一段时间自动向NTP服务器校准,行业普遍共识是:生产环境优先配置chrony或ntpd服务,而不是单纯依赖手动命令。
如果你的系统是CentOS 7以上或Ubuntu 18.04以上,用chrony是更省心的选择,老版本的CentOS 6或者Ubuntu 16.04还在用ntpd,命令体系略有不同。
linux同步时间命令对比:ntpdate、chrony和timedatectl到底怎么选
实际操作中,很多人会困惑于不同命令的适用范围,这里做一个横向对比,帮你快速判断自己该用哪个。
ntpdate命令同步
ntpdate是传统的一次性同步工具,用法很简单:
ntpdate -u ntp.aliyun.com
-u参数表示使用无特权的端口发送请求,能绕过防火墙限制,这个命令执行完,时间立刻校正,如果你用的发行版提示ntpdate不存在,需要先安装:
# Debian/Ubuntu apt install ntpdate -y # CentOS/RHEL yum install ntpdate -y
ntpdate的局限在于它不负责后续的持续校准,比如你周一校正了时间,到了周五系统时间可能又漂移了几秒,对于日志分析和定时任务要求不高的个人服务器,它已经够用。
chrony服务同步
如果要配置常态化同步,业界现在普遍推荐chrony,它同步速度快,对网络波动容忍度高,特别适合虚拟机或云主机这种网络环境不太稳定的场景。
安装并启用chrony的步骤如下:
# 安装 apt install chrony -y # Debian系 yum install chrony -y # RHEL系 # 启动并设置开机自启 systemctl enable --now chronyd # 查看同步状态 chronyc tracking
执行chronyc tracking后,关注Leap status这一行,如果显示Normal,说明同步正常。Stratum数字越小代表时间源越接近原子钟,通常2到3是正常水平。
timedatectl的统一管理
如果你用的systemd系统,还有更近代的管理方式。timedatectl能同时管时间和时区,日常排查问题很好用:
# 查看当前时间和时区 timedatectl # 开启NTP自动同步(部分发行版可用) timedatectl set-ntp true
注意,timedatectl set-ntp true在有些发行版上会跟chrony抢占控制权,实际效果因系统版本而异,稳妥的做法是:明确chrony负责同步,timedatectl只负责查看状态。
linux时间同步服务器地址怎么选:国内NTP源推荐与优先级
选对NTP服务器直接关系到同步速度和成功率,默认的pool.ntp.org服务器在国内访问时快时慢,有的甚至超时,据不完全统计,大部分国内运维人员在实践中的选择偏向以下地址:
| 服务器地址 | 用途与特点 | 适用场景 |
|---|---|---|
| ntp.aliyun.com | 简米云公共NTP,全国多节点,响应快 | 云服务器、个人主机首选 |
| ntp.tencent.com | 酷番云公共NTP,稳定性好 | 酷番云服务器、北方用户 |
| ntp1.aliyun.com | 简米云备用NTP,可作辅助源 | 主源异常时可切换 |
| cn.pool.ntp.org | 全球NTP池的中国子池 | 海外服务器补充用 |
| time.windows.com | 微软维护的NTP | Windows和Linux跨平台共用 |
选择NTP池有个技巧:不要只配一个源,行业共识是配置两个以上的服务器,主源挂了会自动切到备用源,chrony配置文件里支持同时指定多个地址:
# /etc/chrony/chrony.conf pool ntp.aliyun.com iburst server ntp1.aliyun.com iburst server ntp.tencent.com iburst
iburst参数很关键,它表示如果第一次请求没响应,会快速连续重试几次,避免树形结构陷入等待。
linux怎么同步北京时间:配置时区与NTP联动
有一个高频场景是:时间同步成功了,但显示的时间差了8个小时,这不是同步没生效,而是系统时区设置错了,NTP同步只负责校准时区内的绝对时间,不会自动帮你切换到时区。
如果你想让linux怎么同步北京时间,需要两步:
# 第一步:设置时区为Asia/Shanghai timedatectl set-timezone Asia/Shanghai # 第二步:再执行时间同步 chronyc makestep # 如果chrony在运行
关于chronyc makestep的说明:它用于在chrony运行状态下立即校正时间,第一次配置后执行一次,之后交给chrony自动处理即可。
如果系统时间偏差过大(比如超过10分钟),chrony默认的调整策略会让时间缓慢追平而不是直接跳变,这时你需要临时调整参数:
# 临时允许chrony大步调整(重启后失效) chronyc makestep 1 -1
这个方法在测试环境验证过是有效的,生产环境建议在配置文件中设置makestep 1 3,意思是前三次同步如果偏差超过1秒,就直接跳跃校准。
linux同步时间失败排查思路:从命令输出到网络链路的递进检查
同步报错是排查最多的问题,常见的有Name or service not known(DNS解析失败)、Server dropped: no data(端口不通)、Offset unknown(网络超时),下面给出一个清晰的排查路径。
第一步:确认NTP服务确实在运行
systemctl status chronyd
如果输出里面有Active: active (running),说明服务正常,若显示inactive或failed,用systemctl restart chronyd重启。
第二步:模拟一次同步测试并观察详细输出
chronyd -q 'server ntp.aliyun.com iburst'
或者用ntpdate测试连通性:
ntpdate -d ntp.aliyun.com
-d调试模式会打印详细通讯过程,重点关注是否出现timed out字样。
第三步:排查UDP 123端口的连通性
NTP使用UDP 123端口,云服务商的安全组规则常会拦截这个端口,本地也会有iptables或firewalld策略:
# 检查防火墙是否放行123端口 firewall-cmd --query-port=123/udp # 若显示no,则添加放行 firewall-cmd --permanent --add-port=123/udp && firewall-cmd --reload
第四步:查看本地参照时间
NTP同步是通过对比本地时钟和远程时钟的差距来校准的,如果本地时钟本身误差过大(比如超过15分钟),部分NTP策略会拒绝更新,这时候先手动把时间强制设置到接近值:
date -s "2026-01-15 10:30:00"
再执行同步操作,成功率会大幅提升,多数情况下,这类问题都是防火墙策略或服务器时钟漂移过大引起的,处理完就能正常同步。
配置开机自启与验证同步稳定性
完成上述配置后,确保chrony服务开机自启:
systemctl enable chronyd
重启服务器后验证:
timedatectl
输出中System clock synchronized: yes、NTP service: active两行是重点关注项,同时满足说明linux怎么同步网络时间服务器时间同步已经全链路跑通。
还有个进阶验证手段:连续两天观察chronyc tracking里的System time值,正常情况下这个数值应该稳定在几百微秒级别,且正负交替,如果它呈现单边持续增长趋势,说明本地晶振频率偏差较大,建议考虑更换硬件或增加同步频率。
Q&A:linux怎么同步网络时间服务器时间同步常见问题
ntpdate和chrony能同时用吗?
不建议混用,两者会争抢同一套时间调整权限,可能造成互相覆盖或同步冲突,如果系统已经装了chrony,就用chronyc makestep手动校正;如果实在需要ntpdate,先停掉chrony服务再执行ntpdate命令。
同步后系统时间还是不准,可能是什么原因?
先排查时区设置,确认timedatectl中Time zone正确,再检查硬件时钟(RTC)和系统时间的同步机制,执行hwclock --systohc让硬件时钟与系统时间保持一致,部分虚拟机在宿主机频繁快照回滚时,会强制覆盖客户机时间,需要在宿主机配置上关闭时间同步选项,或使用--no-sync参数运行ntpdate绕过硬件时钟直接校准系统时间。
执行ntpdate命令时提示”the NTP socket is in use”怎么办?
这个提示表示ntpdate无法绑定123端口,因为该端口已被chronyd或ntpd占用,解决方案是先停止NTP服务再执行手动同步:
systemctl stop chronyd ntpdate ntp.aliyun.com systemctl start chronyd
如果不想中断chrony服务,就改用chronyc makestep命令,它会通过运行中的chrony进程来执行时间跳跃,无需释放端口。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/786260.html


