linux中用crontab定期同步网络时间需安装ntpdate或chronyc,配置绝对路径的定时任务(如10 5 * /usr/sbin/ntpdate -u ntp.aliyun.com && /sbin/hwclock -w),并确保crond运行、权限正确、硬件时钟同步(hwclock -w)以持久生效。

Linux 中用 crontab 定期同步网络时间,核心是让系统定时执行 ntpdate(或更现代的 chronyc)命令,并把校准后的时间写入硬件时钟。关键点在于:命令要可用、权限要正确、时间写入 BIOS 才能持久生效。
确认时间同步工具已安装
较老系统常用 ntpdate,新系统(如 RHEL 8+/CentOS 8+)默认用 chrony:
- 检查是否安装:
which ntpdate或which chronyc - 若未安装:
sudo yum install -y ntpdate(CentOS/RHEL)或sudo apt install -y ntpdate(Debian/Ubuntu) - 使用阿里云公共 NTP 服务器较稳定:
ntp.aliyun.com;国内还可选210.72.145.44(中国国家授时中心)
编写正确的 crontab 条目
推荐用用户级 crontab(crontab -e),避免直接编辑系统文件。注意格式和路径:
- 每天凌晨 5:10 同步并更新硬件时钟:
10 5 * * * /usr/sbin/ntpdate -u ntp.aliyun.com && /sbin/hwclock -w - 每小时同步一次(适合对时间精度要求较高的场景):
0 * * * * /usr/sbin/ntpdate -u ntp.aliyun.com >/dev/null 2>&1; /sbin/hwclock -w - 务必使用绝对路径(
/usr/sbin/ntpdate而非ntpdate),因为 crontab 不继承 shell 的 PATH -
-u参数表示使用无特权端口,绕过防火墙限制,建议始终加上
确保硬件时间同步不被忽略
只运行 ntpdate 只改系统时间,重启后会丢失——必须同步到 BIOS:
-
hwclock -w将当前系统时间写入硬件时钟(等价于clock -w) - 验证是否成功:分别运行
date和hwclock -r,两者输出应基本一致(误差几秒内) - 若使用
chrony,可改用chronyc makestep强制立即同步,再配合timedatectl set-local-rtc 0确保 RTC 使用 UTC(推荐)
检查与排错要点
同步失败常见原因不是命令写错,而是环境或权限问题:
- 确认
crond服务正在运行:systemctl status crond,未启动则systemctl enable --now crond - 查看 cron 日志:
sudo tail -f /var/log/cron,观察任务是否触发、有无报错(如“command not found”说明路径不对) - 测试命令手动执行是否成功:
sudo /usr/sbin/ntpdate -u ntp.aliyun.com && sudo /sbin/hwclock -w - 若提示 “the NTP socket is in use”,说明
chronyd或ntpd正在运行,需先停用:sudo systemctl stop chronyd(二者不可共存)











