settime.sh 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #!/bin/bash
  2. set -e
  3. REBOOT_FLAG="$1" # true / false
  4. ACTION="$2" # set_ntp / set_manual
  5. MANUAL_TIME="$3" # 手动时间(可选)
  6. CONFIG_FILE="/etc/speaker.conf"
  7. # ===== 读取配置 =====
  8. get_config() {
  9. local key="$1"
  10. grep "^$key=" "$CONFIG_FILE" | cut -d'=' -f2-
  11. }
  12. NTP_SERVER=$(get_config "ntpserver")
  13. TIMEZONE=$(get_config "tzname")
  14. ENABLE_NTP=$(get_config "enable_ntp")
  15. # 默认值兜底
  16. [ -z "$TIMEZONE" ] && TIMEZONE="Asia/Shanghai"
  17. [ -z "$NTP_SERVER" ] && NTP_SERVER="pool.ntp.org"
  18. echo "======================================"
  19. echo " Apply Time Config"
  20. echo "======================================"
  21. echo "CONFIG:"
  22. echo " NTP_SERVER=$NTP_SERVER"
  23. echo " TIMEZONE=$TIMEZONE"
  24. echo " ENABLE_NTP=$ENABLE_NTP"
  25. echo " ACTION=$ACTION"
  26. echo " REBOOT_FLAG=$REBOOT_FLAG"
  27. echo ""
  28. # ===== 设置时区 =====
  29. echo "===> 设置时区: $TIMEZONE"
  30. timedatectl set-timezone "$TIMEZONE"
  31. # ===== NTP 模式 =====
  32. if [ "$ACTION" = "set_ntp" ]; then
  33. echo "===> 模式: NTP 自动同步"
  34. echo "===> 写入 NTP 配置"
  35. cat > /etc/systemd/timesyncd.conf <<EOF
  36. [Time]
  37. NTP=$NTP_SERVER
  38. FallbackNTP=ntp.ubuntu.com
  39. EOF
  40. echo "===> 启用 NTP"
  41. timedatectl set-ntp true
  42. echo "===> 启用并重启 timesyncd"
  43. systemctl enable systemd-timesyncd
  44. systemctl restart systemd-timesyncd
  45. echo "===> 等待同步..."
  46. sleep 2
  47. # ===== 手动模式 =====
  48. elif [ "$ACTION" = "set_manual" ]; then
  49. echo "===> 模式: 手动时间"
  50. if [ -z "$MANUAL_TIME" ]; then
  51. echo "❌ 错误: 未提供手动时间"
  52. exit 1
  53. fi
  54. echo "===> 关闭 NTP"
  55. timedatectl set-ntp false
  56. echo "===> 停止并禁用 timesyncd"
  57. systemctl stop systemd-timesyncd || true
  58. systemctl disable systemd-timesyncd || true
  59. echo "===> 设置时间: $MANUAL_TIME"
  60. timedatectl set-time "$MANUAL_TIME"
  61. echo "===> 写入 RTC(防止重启丢失)"
  62. hwclock --systohc
  63. else
  64. echo "❌ 未知操作: $ACTION"
  65. exit 1
  66. fi
  67. # ===== 状态输出 =====
  68. echo ""
  69. echo "======================================"
  70. echo " 当前状态"
  71. echo "======================================"
  72. timedatectl status
  73. echo ""
  74. echo "===> timesync 信息"
  75. timedatectl show-timesync --all | grep -E 'ServerName|NTP|Fallback' || true
  76. echo ""
  77. echo "===> timesyncd 服务状态"
  78. systemctl is-enabled systemd-timesyncd || true
  79. systemctl is-active systemd-timesyncd || true
  80. # ===== 是否重启 =====
  81. if [ "$REBOOT_FLAG" = "true" ]; then
  82. echo ""
  83. echo "===> 系统即将重启..."
  84. sleep 2
  85. reboot
  86. fi
  87. echo "======================================"
  88. echo " 完成"
  89. echo "======================================"
  90. exit 0