manual_time_fix.sh
· 2.1 KiB · Bash
Eredeti
#!/bin/bash
# =========================
# 手动时间校准工具(适用于 chrony 环境)
# =========================
echo "=============================="
echo " 手动时间校准工具(chrony环境)"
echo "=============================="
# 1. 检查是否为 root
if [ "$EUID" -ne 0 ]; then
echo "[ERROR] 请使用 root 用户执行此脚本"
exit 1
fi
# 2. 显示当前时间状态
echo ""
echo "[INFO] 当前系统时间:"
date
echo ""
echo "[INFO] 当前时间同步状态(timedatectl):"
timedatectl status
# 3. 停止 chrony 服务
echo ""
echo "[STEP] 停止 chrony 服务..."
systemctl stop chronyd
# 4. 禁止开机自启(防止重启后又同步回去)
echo "[STEP] 禁用 chrony 开机启动..."
systemctl disable chronyd
# 5. 关闭 systemd 的 NTP 自动同步(双保险)
echo "[STEP] 关闭系统级 NTP 自动同步..."
timedatectl set-ntp false
# 6. 再次确认状态
echo ""
echo "[INFO] 当前时间同步状态(确认已关闭):"
timedatectl status | grep "NTP"
# 7. 提示用户输入时间
echo ""
echo "=============================="
echo "请输入你要设置的时间"
echo "格式:YYYY-MM-DD HH:MM:SS"
echo "示例:2026-03-19 14:30:00"
echo "=============================="
read -p "请输入时间: " NEW_TIME
# 8. 设置系统时间
echo ""
echo "[STEP] 设置系统时间..."
date -s "$NEW_TIME"
# 9. 同步硬件时钟(非常关键)
echo "[STEP] 同步到硬件时钟(RTC)..."
hwclock --systohc
# 10. 最终校验
echo ""
echo "[INFO] 设置后的系统时间:"
date
echo ""
echo "[INFO] 硬件时钟时间:"
hwclock -r
echo ""
echo "=============================="
echo " 时间设置完成"
echo "=============================="
# 11. 风险提示
echo ""
echo "[WARNING] 注意事项:"
echo "1. 当前已完全关闭时间同步,时间不会自动校准"
echo "2. 如果时间漂移,会持续误差"
echo "3. 某些服务(如数据库、JWT、分布式系统)可能受时间影响"
echo "4. 如需恢复,请执行:"
echo " systemctl enable chronyd && systemctl start chronyd"
echo " timedatectl set-ntp true"
| 1 | #!/bin/bash |
| 2 | |
| 3 | # ========================= |
| 4 | # 手动时间校准工具(适用于 chrony 环境) |
| 5 | # ========================= |
| 6 | |
| 7 | echo "==============================" |
| 8 | echo " 手动时间校准工具(chrony环境)" |
| 9 | echo "==============================" |
| 10 | |
| 11 | # 1. 检查是否为 root |
| 12 | if [ "$EUID" -ne 0 ]; then |
| 13 | echo "[ERROR] 请使用 root 用户执行此脚本" |
| 14 | exit 1 |
| 15 | fi |
| 16 | |
| 17 | # 2. 显示当前时间状态 |
| 18 | echo "" |
| 19 | echo "[INFO] 当前系统时间:" |
| 20 | date |
| 21 | |
| 22 | echo "" |
| 23 | echo "[INFO] 当前时间同步状态(timedatectl):" |
| 24 | timedatectl status |
| 25 | |
| 26 | # 3. 停止 chrony 服务 |
| 27 | echo "" |
| 28 | echo "[STEP] 停止 chrony 服务..." |
| 29 | systemctl stop chronyd |
| 30 | |
| 31 | # 4. 禁止开机自启(防止重启后又同步回去) |
| 32 | echo "[STEP] 禁用 chrony 开机启动..." |
| 33 | systemctl disable chronyd |
| 34 | |
| 35 | # 5. 关闭 systemd 的 NTP 自动同步(双保险) |
| 36 | echo "[STEP] 关闭系统级 NTP 自动同步..." |
| 37 | timedatectl set-ntp false |
| 38 | |
| 39 | # 6. 再次确认状态 |
| 40 | echo "" |
| 41 | echo "[INFO] 当前时间同步状态(确认已关闭):" |
| 42 | timedatectl status | grep "NTP" |
| 43 | |
| 44 | # 7. 提示用户输入时间 |
| 45 | echo "" |
| 46 | echo "==============================" |
| 47 | echo "请输入你要设置的时间" |
| 48 | echo "格式:YYYY-MM-DD HH:MM:SS" |
| 49 | echo "示例:2026-03-19 14:30:00" |
| 50 | echo "==============================" |
| 51 | read -p "请输入时间: " NEW_TIME |
| 52 | |
| 53 | # 8. 设置系统时间 |
| 54 | echo "" |
| 55 | echo "[STEP] 设置系统时间..." |
| 56 | date -s "$NEW_TIME" |
| 57 | |
| 58 | # 9. 同步硬件时钟(非常关键) |
| 59 | echo "[STEP] 同步到硬件时钟(RTC)..." |
| 60 | hwclock --systohc |
| 61 | |
| 62 | # 10. 最终校验 |
| 63 | echo "" |
| 64 | echo "[INFO] 设置后的系统时间:" |
| 65 | date |
| 66 | |
| 67 | echo "" |
| 68 | echo "[INFO] 硬件时钟时间:" |
| 69 | hwclock -r |
| 70 | |
| 71 | echo "" |
| 72 | echo "==============================" |
| 73 | echo " 时间设置完成" |
| 74 | echo "==============================" |
| 75 | |
| 76 | # 11. 风险提示 |
| 77 | echo "" |
| 78 | echo "[WARNING] 注意事项:" |
| 79 | echo "1. 当前已完全关闭时间同步,时间不会自动校准" |
| 80 | echo "2. 如果时间漂移,会持续误差" |
| 81 | echo "3. 某些服务(如数据库、JWT、分布式系统)可能受时间影响" |
| 82 | echo "4. 如需恢复,请执行:" |
| 83 | echo " systemctl enable chronyd && systemctl start chronyd" |
| 84 | echo " timedatectl set-ntp true" |
| 85 | |
| 86 |