登录
首页 >  文章 >  linux

如何在Linux中同步时间 Linux使用NTP同步时间的方法

时间:2026-05-24 22:45:36 189浏览 收藏

小伙伴们对文章编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《如何在Linux中同步时间 Linux使用NTP同步时间的方法》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

应优先使用chrony而非ntpd,因RHEL 8+/CentOS 8+、Ubuntu 20.04+等现代系统已默认弃用ntpd;需明确角色(客户端仅配server行并启用iburst,服务器端须配置allow网段、开放UDP 123端口、禁用宿主机时间同步),并通过chronyc tracking和sources -v验证同步状态。

如何在Linux中同步时间 Linux使用NTP同步时间的方法

Linux 中时间同步不是“配一次就完事”,而是必须明确角色(客户端 or 服务器)、选对工具(ntpd 还是 chronyd)、并处理好防火墙和权限细节,否则看似启动成功,实际根本不同步。

确认你该用 chrony 还是 ntpd

RHEL 8 / CentOS 8+、Fedora、Ubuntu 20.04+ 默认用 chronydntpd 已被弃用或不兼容。强行装 ntpd 可能导致服务冲突、systemctl start ntpd 静默失败、或 ntpq -p 报错 Connection refused

  • 检查是否已安装 chronyrpm -q chronydpkg -l | grep chrony
  • 确认 ntpd 是否在运行:systemctl is-active ntpd —— 若为 active,先停用:systemctl disable --now ntpd
  • chronyd 的配置文件是 /etc/chrony.conf,日志命令是 chronyc trackingchronyc sources -v,不是 ntpq

客户端:快速连上内网 NTP 服务器

如果你只是让本机向局域网里已有的时间服务器(比如 192.168.100.10)同步,别碰 server 行以外的配置,尤其别加 fudge 或改 stratum

  • 编辑 /etc/chrony.conf,确保有且仅有一行有效 serverserver 192.168.100.10 iburstiburst 加速首次同步)
  • 删掉或注释掉所有其他 server 行(比如 pool.ntp.org),避免内外网源混用导致漂移
  • 重启服务:systemctl restart chronyd;立刻检查:chronyc trackingSystem time 是否显示 OKchronyc sources -v 看目标 IP 前是否有 *(表示正在使用)
  • 若仍不同步,检查防火墙:firewall-cmd --list-ports | grep 123,没输出就加:firewall-cmd --permanent --add-port=123/udp && firewall-cmd --reload

服务器端:开放给内网设备同步的关键配置

把一台 Linux 当作局域网时间源,核心不是“能不能对外提供时间”,而是“能不能被客户端正确发现并信任”。allow 指令写错网段、漏开 UDP 123、或未启用硬件时钟写入,都会导致客户端 ntpdate 超时或 chronyc sources 显示 ^? (不可达)。

  • /etc/chrony.conf 中添加允许网段,例如:allow 192.168.100.0/24(不是 192.168.100.0 mask 255.255.255.0,chrony 不认后者)
  • 确保 bindcmdaddressbindaddress 没锁定到 127.0.0.1,否则外部请求收不到
  • 开机自动写回硬件时钟很重要,否则断电后时间归零:在 /etc/sysconfig/chronyd(RHEL/CentOS)或 /etc/default/chrony(Debian/Ubuntu)中设 SYNC_HWCLOCK=yes
  • 验证服务监听:ss -uln | grep :123 应有输出;从客户端执行:chronyc -s -h 192.168.100.10 tracking,能返回结果才算通

常见错误现象与绕过技巧

同步失败时,别急着重装或换源。多数问题出在状态误判或权限链断裂——比如 chronyd 启动了但没读取新配置,或系统时区设错导致 date 输出看起来不准。

  • chronyc tracking 显示 Leap status : Not synchronised:先看 chronyc sources -v,若全是 ^? ,说明网络不通或服务器没开 allow;若有一个 ^* 但仍是未同步,可能是本地时钟偏移太大(>1000s),需加 -s 强制步进:chronyc makestep
  • date 时间对不上,但 chronyc tracking 显示 OK:检查时区是否正确,timedatectl statusTime zoneSystem clock synchronized: yes 是否都满足
  • 虚拟机里同步困难:关掉宿主机的时钟同步功能(如 VMware Tools / VirtualBox Guest Additions 中的 “Synchronize guest time with host”),否则会和 chronyd 抢占干预
  • 临时手动校准(仅调试用):chronyd -q 'server 192.168.100.10 iburst',它会立即同步一次然后退出,不依赖后台服务

真正难的不是敲几条命令,而是理解每台设备在时间拓扑里的位置——是叶子节点?中间转发层?还是最终源头?配错一层,整条链的时间可信度就垮了。特别是混合环境(有些机器用 chrony、有些还跑着 ntpd、还有 Windows 客户端),得逐个确认协议兼容性和防火墙策略,不能只看单点是否“绿灯”。

好了,本文到此结束,带大家了解了《如何在Linux中同步时间 Linux使用NTP同步时间的方法》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多文章知识!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>