推荐优先启用systemd-timesyncd或chrony服务实现Linux服务器时间同步,因其支持自动校时、高精度与稳定性;若需自建脚本,可调用ntpdate并结合cron定时执行,但须先检查系统时间服务状态以避免冲突。

Linux Shell 脚本可以高效实现服务器时间自动同步,核心是调用 ntpdate 或更现代的 chrony/systemd-timesyncd 工具,并通过定时任务(cron)周期执行。
确认系统时间服务状态
先检查当前系统是否已启用时间同步服务,避免脚本与系统服务冲突:
- 运行
timedatectl status查看是否启用systemd-timesyncd(默认启用时无需额外脚本) - 若使用
chronyd,执行systemctl is-active chronyd确认服务运行中 - 若两者都未启用,且需手动同步,再考虑编写同步脚本
编写轻量级时间同步脚本
创建脚本如 /usr/local/bin/sync-time.sh,内容简洁可靠:
#!/bin/bash # 使用公共 NTP 服务器(如阿里云、腾讯云或 pool.ntp.org) NTP_SERVER="ntp1.aliyun.com" LOG_FILE="/var/log/time-sync.log" DATE=$(date '+%Y-%m-%d %H:%M:%S') <h1>检查网络连通性</h1><p>if ! ping -c 1 -W 2 $NTP_SERVER &>/dev/null; then echo "[$DATE] ERROR: Cannot reach $NTP_SERVER" >> $LOG_FILE exit 1 fi</p><h1>尝试同步(需 root 权限)</h1><p>if /usr/bin/ntpdate -s $NTP_SERVER 2>/dev/null; then echo "[$DATE] SUCCESS: Time synced with $NTP_SERVER" >> $LOG_FILE else echo "[$DATE] FAILED: ntpdate failed" >> $LOG_FILE fi
赋予执行权限:chmod +x /usr/local/bin/sync-time.sh
配置定时任务自动执行
用 cron 实现每小时或每天自动同步(推荐每 6 小时一次,避免过于频繁):
- 编辑 root 的 crontab:
sudo crontab -e - 添加一行(例如每 6 小时同步一次):
0 */6 * * * /usr/local/bin/sync-time.sh - 保存后 cron 会自动加载,可通过
sudo crontab -l验证
注意事项与替代方案
现代 Linux 发行版(如 CentOS 8+/RHEL 8+、Ubuntu 20.04+)默认使用 systemd-timesyncd,建议优先启用它而非自建脚本:
- 启用命令:
sudo systemctl enable --now systemd-timesyncd - 查看配置:
cat /etc/systemd/timesyncd.conf,可修改NTP=行指定可信服务器 - 若必须用
chrony,直接配置/etc/chrony.conf并启动服务即可,无需额外脚本
自建脚本适用于老旧系统、定制化需求(如多服务器统一校时源)或临时应急场景。


















