You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

240 line
6.0KB

  1. #!/bin/bash
  2. # 福泉WebAPI 启动脚本
  3. # 作者: Your Name
  4. # 版本: 1.0.0
  5. # 应用配置
  6. APP_NAME="福泉WebAPI"
  7. APP_JAR="webapi-1.0.0.jar"
  8. APP_PORT=8806
  9. APP_CONTEXT_PATH="/fuquanapi"
  10. # JVM配置
  11. JVM_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -XX:+UseStringDeduplication"
  12. JVM_OPTS="$JVM_OPTS -Dserver.port=$APP_PORT"
  13. JVM_OPTS="$JVM_OPTS -Dserver.servlet.context-path=$APP_CONTEXT_PATH"
  14. # 日志配置
  15. LOG_DIR="./logs"
  16. LOG_FILE="$LOG_DIR/app.log"
  17. PID_FILE="./app.pid"
  18. # 颜色定义
  19. RED='\033[0;31m'
  20. GREEN='\033[0;32m'
  21. YELLOW='\033[1;33m'
  22. BLUE='\033[0;34m'
  23. NC='\033[0m' # No Color
  24. # 打印带颜色的消息
  25. print_message() {
  26. local color=$1
  27. local message=$2
  28. echo -e "${color}[$(date '+%Y-%m-%d %H:%M:%S')] $message${NC}"
  29. }
  30. # 检查Java环境
  31. check_java() {
  32. if ! command -v java &> /dev/null; then
  33. print_message $RED "错误: 未找到Java环境,请先安装JDK 1.8+"
  34. exit 1
  35. fi
  36. JAVA_VERSION=$(java -version 2>&1 | head -n 1 | cut -d'"' -f2)
  37. print_message $BLUE "检测到Java版本: $JAVA_VERSION"
  38. }
  39. # 检查应用JAR文件
  40. check_jar() {
  41. if [ ! -f "$APP_JAR" ]; then
  42. print_message $RED "错误: 未找到应用JAR文件: $APP_JAR"
  43. print_message $YELLOW "请确保在正确的目录下运行此脚本"
  44. exit 1
  45. fi
  46. print_message $GREEN "找到应用JAR文件: $APP_JAR"
  47. }
  48. # 创建日志目录
  49. create_log_dir() {
  50. if [ ! -d "$LOG_DIR" ]; then
  51. mkdir -p "$LOG_DIR"
  52. print_message $BLUE "创建日志目录: $LOG_DIR"
  53. fi
  54. }
  55. # 检查应用是否已运行
  56. check_running() {
  57. if [ -f "$PID_FILE" ]; then
  58. PID=$(cat "$PID_FILE")
  59. if ps -p $PID > /dev/null 2>&1; then
  60. print_message $YELLOW "应用已在运行中,PID: $PID"
  61. return 0
  62. else
  63. print_message $YELLOW "发现无效的PID文件,正在清理..."
  64. rm -f "$PID_FILE"
  65. fi
  66. fi
  67. return 1
  68. }
  69. # 启动应用
  70. start_app() {
  71. print_message $BLUE "正在启动 $APP_NAME..."
  72. # 启动应用
  73. nohup java $JVM_OPTS -jar "$APP_JAR" > "$LOG_FILE" 2>&1 &
  74. # 获取进程ID
  75. PID=$!
  76. echo $PID > "$PID_FILE"
  77. # 等待应用启动
  78. print_message $BLUE "应用启动中,PID: $PID"
  79. sleep 3
  80. # 检查应用是否成功启动
  81. if ps -p $PID > /dev/null 2>&1; then
  82. print_message $GREEN "$APP_NAME 启动成功!"
  83. print_message $GREEN "访问地址: http://localhost:$APP_PORT$APP_CONTEXT_PATH"
  84. print_message $GREEN "API文档: http://localhost:$APP_PORT$APP_CONTEXT_PATH/swagger-ui.html"
  85. print_message $GREEN "日志文件: $LOG_FILE"
  86. print_message $GREEN "PID文件: $PID_FILE"
  87. else
  88. print_message $RED "应用启动失败,请检查日志文件: $LOG_FILE"
  89. rm -f "$PID_FILE"
  90. exit 1
  91. fi
  92. }
  93. # 停止应用
  94. stop_app() {
  95. if [ -f "$PID_FILE" ]; then
  96. PID=$(cat "$PID_FILE")
  97. if ps -p $PID > /dev/null 2>&1; then
  98. print_message $BLUE "正在停止 $APP_NAME (PID: $PID)..."
  99. kill $PID
  100. # 等待进程结束
  101. for i in {1..30}; do
  102. if ! ps -p $PID > /dev/null 2>&1; then
  103. print_message $GREEN "$APP_NAME 已停止"
  104. rm -f "$PID_FILE"
  105. return 0
  106. fi
  107. sleep 1
  108. done
  109. # 强制杀死进程
  110. print_message $YELLOW "应用未正常停止,正在强制终止..."
  111. kill -9 $PID
  112. rm -f "$PID_FILE"
  113. print_message $GREEN "$APP_NAME 已强制停止"
  114. else
  115. print_message $YELLOW "应用未在运行"
  116. rm -f "$PID_FILE"
  117. fi
  118. else
  119. print_message $YELLOW "未找到PID文件,应用可能未在运行"
  120. fi
  121. }
  122. # 重启应用
  123. restart_app() {
  124. print_message $BLUE "正在重启 $APP_NAME..."
  125. stop_app
  126. sleep 2
  127. start_app
  128. }
  129. # 查看应用状态
  130. status_app() {
  131. if [ -f "$PID_FILE" ]; then
  132. PID=$(cat "$PID_FILE")
  133. if ps -p $PID > /dev/null 2>&1; then
  134. print_message $GREEN "$APP_NAME 正在运行,PID: $PID"
  135. print_message $GREEN "访问地址: http://localhost:$APP_PORT$APP_CONTEXT_PATH"
  136. else
  137. print_message $RED "$APP_NAME 未在运行(PID文件存在但进程不存在)"
  138. rm -f "$PID_FILE"
  139. fi
  140. else
  141. print_message $YELLOW "$APP_NAME 未在运行"
  142. fi
  143. }
  144. # 查看日志
  145. view_logs() {
  146. if [ -f "$LOG_FILE" ]; then
  147. print_message $BLUE "显示最新日志 (最后50行):"
  148. echo "----------------------------------------"
  149. tail -n 50 "$LOG_FILE"
  150. echo "----------------------------------------"
  151. else
  152. print_message $YELLOW "日志文件不存在: $LOG_FILE"
  153. fi
  154. }
  155. # 显示帮助信息
  156. show_help() {
  157. echo "福泉WebAPI 管理脚本"
  158. echo ""
  159. echo "用法: $0 {start|stop|restart|status|logs|help}"
  160. echo ""
  161. echo "命令:"
  162. echo " start - 启动应用"
  163. echo " stop - 停止应用"
  164. echo " restart - 重启应用"
  165. echo " status - 查看应用状态"
  166. echo " logs - 查看应用日志"
  167. echo " help - 显示此帮助信息"
  168. echo ""
  169. echo "配置:"
  170. echo " 应用JAR: $APP_JAR"
  171. echo " 端口: $APP_PORT"
  172. echo " 上下文路径: $APP_CONTEXT_PATH"
  173. echo " 日志文件: $LOG_FILE"
  174. }
  175. # 主函数
  176. main() {
  177. case "$1" in
  178. start)
  179. check_java
  180. check_jar
  181. create_log_dir
  182. if check_running; then
  183. exit 0
  184. fi
  185. start_app
  186. ;;
  187. stop)
  188. stop_app
  189. ;;
  190. restart)
  191. check_java
  192. check_jar
  193. create_log_dir
  194. restart_app
  195. ;;
  196. status)
  197. status_app
  198. ;;
  199. logs)
  200. view_logs
  201. ;;
  202. help|--help|-h)
  203. show_help
  204. ;;
  205. *)
  206. print_message $RED "错误: 未知命令 '$1'"
  207. echo ""
  208. show_help
  209. exit 1
  210. ;;
  211. esac
  212. }
  213. # 执行主函数
  214. main "$@"