数据解析模块
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

setup-server.sh 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #!/bin/bash
  2. # IoT Platform 服务器初始化脚本
  3. # 在 online180 上执行,创建规范目录结构并迁移现有服务到 systemd
  4. set -e
  5. APP_NAME="iot-platform"
  6. INSTALL_DIR="/opt/${APP_NAME}"
  7. BACKUP_DIR="${INSTALL_DIR}/backup"
  8. LOG_DIR="${INSTALL_DIR}/logs"
  9. CONFIG_DIR="${INSTALL_DIR}/config"
  10. BIN_DIR="${INSTALL_DIR}/bin"
  11. OLD_JAR="/home/${APP_NAME}.jar"
  12. OLD_LOG_DIR="/home/logs"
  13. echo "========================================"
  14. echo "IoT Platform 服务器初始化"
  15. echo "========================================"
  16. # 1. 创建目录结构
  17. echo "[1/7] 创建目录结构..."
  18. mkdir -p "${INSTALL_DIR}" "${BACKUP_DIR}" "${LOG_DIR}" "${CONFIG_DIR}" "${BIN_DIR}"
  19. # 2. 迁移 JAR 文件
  20. echo "[2/7] 迁移 JAR 文件..."
  21. if [ -f "${OLD_JAR}" ]; then
  22. cp -a "${OLD_JAR}" "${INSTALL_DIR}/${APP_NAME}.jar"
  23. echo " 已复制: ${OLD_JAR} -> ${INSTALL_DIR}/${APP_NAME}.jar"
  24. else
  25. echo " 警告: 未找到旧 JAR 文件 ${OLD_JAR}"
  26. fi
  27. # 3. 迁移日志
  28. echo "[3/7] 迁移日志..."
  29. if [ -d "${OLD_LOG_DIR}" ]; then
  30. # 复制已有日志
  31. cp -a "${OLD_LOG_DIR}"/* "${LOG_DIR}/" 2>/dev/null || true
  32. echo " 已复制日志到 ${LOG_DIR}"
  33. # 可选:备份旧日志目录,创建软链接
  34. mv "${OLD_LOG_DIR}" "${OLD_LOG_DIR}.bak.$(date +%Y%m%d%H%M%S)" 2>/dev/null || true
  35. ln -s "${LOG_DIR}" "${OLD_LOG_DIR}" 2>/dev/null || true
  36. echo " 旧日志目录已备份并创建软链接"
  37. else
  38. echo " 旧日志目录不存在,跳过迁移"
  39. fi
  40. # 4. 设置权限
  41. echo "[4/7] 设置权限..."
  42. chmod 755 "${INSTALL_DIR}" "${BACKUP_DIR}" "${LOG_DIR}" "${CONFIG_DIR}" "${BIN_DIR}"
  43. # 5. 安装 .env 文件(如果当前目录有)
  44. echo "[5/7] 安装环境变量文件..."
  45. if [ -f "/tmp/iot-platform.env" ]; then
  46. cp "/tmp/iot-platform.env" "${INSTALL_DIR}/.env"
  47. chmod 600 "${INSTALL_DIR}/.env"
  48. echo " 已安装 .env"
  49. else
  50. echo " 警告: 未找到 /tmp/iot-platform.env,请手动创建 ${INSTALL_DIR}/.env"
  51. fi
  52. # 6. 安装 systemd 服务
  53. echo "[6/7] 安装 systemd 服务..."
  54. if [ -f "/tmp/iot-platform.service" ]; then
  55. cp "/tmp/iot-platform.service" /etc/systemd/system/iot-platform.service
  56. chmod 644 /etc/systemd/system/iot-platform.service
  57. systemctl daemon-reload
  58. systemctl enable iot-platform
  59. echo " systemd 服务已安装并启用"
  60. else
  61. echo " 错误: 未找到 /tmp/iot-platform.service"
  62. exit 1
  63. fi
  64. # 7. 平滑切换:停止旧进程,启动 systemd
  65. echo "[7/7] 平滑切换到 systemd..."
  66. OLD_PID=$(ps -ef | grep java | grep "${APP_NAME}.jar" | grep -v grep | grep -v systemd | awk '{print $2}' | head -1)
  67. if [ -n "${OLD_PID}" ]; then
  68. echo " 发现旧进程 PID=${OLD_PID}, 发送 SIGTERM..."
  69. kill -TERM "${OLD_PID}" 2>/dev/null || true
  70. # 等待最多 30 秒
  71. for i in $(seq 1 30); do
  72. if ! kill -0 "${OLD_PID}" 2>/dev/null; then
  73. echo " 旧进程已停止"
  74. break
  75. fi
  76. sleep 1
  77. done
  78. # 强制结束
  79. if kill -0 "${OLD_PID}" 2>/dev/null; then
  80. echo " 旧进程未响应,发送 SIGKILL..."
  81. kill -KILL "${OLD_PID}" 2>/dev/null || true
  82. fi
  83. else
  84. echo " 未发现旧进程"
  85. fi
  86. echo ""
  87. echo "启动 systemd 服务..."
  88. systemctl start iot-platform
  89. sleep 3
  90. # 检查服务状态
  91. if systemctl is-active --quiet iot-platform; then
  92. echo ""
  93. echo "========================================"
  94. echo "初始化成功!"
  95. echo "========================================"
  96. echo "服务状态:"
  97. systemctl status iot-platform --no-pager
  98. echo ""
  99. echo "目录结构:"
  100. ls -la "${INSTALL_DIR}"
  101. echo ""
  102. echo "常用命令:"
  103. echo " systemctl status iot-platform # 查看状态"
  104. echo " journalctl -u iot-platform -f # 实时日志"
  105. echo " systemctl stop iot-platform # 停止服务"
  106. echo " systemctl restart iot-platform # 重启服务"
  107. else
  108. echo ""
  109. echo "========================================"
  110. echo "警告: 服务启动可能失败,请检查日志"
  111. echo "========================================"
  112. journalctl -u iot-platform --no-pager -n 50
  113. exit 1
  114. fi