Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

250 rindas
6.3KB

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