提供一个同步服务器时间的脚本。该脚本用于同步物理机系统时间,首先检测并优先使用chrony或ntpdate工具连接阿里云NTP服务器进行时间同步,若未安装则自动安装chrony服务。接着将时区设置为Asia/Shanghai,最后显示当前系统时间和硬件时钟状态。脚本包含错误处理机制,支持多种Linux发行版,执行完成后会输出同步结果。
bash
#!/bin/bash
# sync_time.sh - 同步物理机时间
echo "===== 开始时间同步 ====="
# 1. 物理机时间同步
echo "1. 同步物理机时间..."
if command -v chronyc &> /dev/null; then
echo " 使用chrony同步..."
systemctl stop chronyd 2>/dev/null
chronyd -q 'server ntp.aliyun.com iburst' 2>/dev/null
systemctl start chronyd 2>/dev/null
elif command -v ntpdate &> /dev/null; then
echo " 使用ntpdate同步..."
ntpdate -s time1.aliyun.com 2>/dev/null || \
ntpdate -s ntp1.aliyun.com 2>/dev/null || \
ntpdate -s time.windows.com 2>/dev/null
else
echo " 安装时间同步工具..."
dnf install -y chrony 2>/dev/null || yum install -y chrony 2>/dev/null
systemctl start chronyd
systemctl enable chronyd
chronyd -q 'server ntp.aliyun.com iburst'
fi
# 2. 设置时区
echo "2. 设置时区..."
timedatectl set-timezone Asia/Shanghai 2>/dev/null || {
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone 2>/dev/null || true
}
# 3. 显示当前时间
echo "3. 当前时间:"
date
hwclock -r 2>/dev/null || echo "无法读取硬件时钟"
echo "===== 时间同步完成 ====="