centos ntpdate安装

CentOS 7 自带的时间同步工具是 chrony,但很多老派运维还是习惯用 ntpdate 做一次性校时。原因很简单——有些内网机器压根不允许长期开放 UDP 123 端口,chrony 那种常驻进程反而碍事。装 ntpdate 这事儿,说穿了就三步:装包、改配置、跑命令。

先看系统里有没有现成的。CentOS 的 base 源里其实一直保留着 ntpdate,只是默认不装。直接 yum install ntpdate -y 就行,几十秒搞定。要是碰上 CentOS 8 那种默认源里没有的情况,别急着换源,先 yum list ntpdate 看一眼,大概率是 epel 没启用——yum install epel-release 之后再装,这坑我踩过两次。

装完先别急着跑。默认配置里 ntpdate 会去连 pool.ntp.org,但国内网络环境访问这个域名经常超时。我建议直接改成阿里云的时间服务器,编辑 /etc/ntp/step-tickers 文件,把内容替换成 ntp.aliyun.com。要是公司内网有自建 NTP 服务器,写内网 IP 更稳,毕竟外网请求有时候会被防火墙拦得莫名其妙。

手动校时命令很简单:ntpdate ntp.aliyun.com。跑完会输出类似 adjust time server 203.107.6.88 offset -0.003245 sec 的信息,看到 offset 后面的数值小于 0.1 基本就算成功。但有个细节容易忽略——如果系统时间偏差超过 1000 秒,ntpdate 会拒绝工作,报错 no server suitable for synchronization found。这时候得先手动把日期改成大致正确的,比如 date -s "2025-01-15 10:00:00",再跑 ntpdate。

更恶心的情况是端口被占用。有次我排查半天,发现是 chronyd 还在跑,跟 ntpdate 抢端口。解决方式简单粗暴:systemctl stop chronyd && systemctl disable chronyd。你要是想保留 chrony 做日常同步,那就在 cron 里加个任务,每天凌晨跑一次 ntpdate 校准,但得注意别让两个服务同时启动,否则日志里全是端口冲突报错。

最后提个建议——别把 ntpdate 写进 rc.local。开机时网络可能还没就绪,执行必然失败。真要开机同步,用 cron 的 @reboot 加个延时更靠谱,比如 @reboot sleep 10 && ntpdate ntp.aliyun.com。这招我用了五年,从 CentOS 6 到 8 都没出过岔子。

顺便说一句,现在 CentOS 7 已经进入维护尾声,新项目建议直接上 chrony。但如果只是临时救急,或者维护老机器,ntpdate 这套流程仍然管用。毕竟工具不分新旧,分场合。