|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- #!/bin/bash
-
- # 福泉WebAPI 启动脚本
- # 作者: Your Name
- # 版本: 1.0.0
-
- # 应用配置
- APP_NAME="福泉WebAPI"
- APP_JAR="webapi-1.0.0.jar"
- APP_PORT=8806
- APP_CONTEXT_PATH="/fuquanapi"
-
- # JVM配置
- JVM_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -XX:+UseStringDeduplication"
-
- # 日志配置
- LOG_DIR="./logs"
- LOG_FILE="$LOG_DIR/app.log"
- PID_FILE="./app.pid"
-
- # 颜色定义
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- BLUE='\033[0;34m'
- NC='\033[0m' # No Color
-
- # 打印带颜色的消息
- print_message() {
- local color=$1
- local message=$2
- echo -e "${color}[$(date '+%Y-%m-%d %H:%M:%S')] $message${NC}"
- }
-
- # 检查Java环境
- check_java() {
- if ! command -v java &> /dev/null; then
- print_message $RED "错误: 未找到Java环境,请先安装JDK 1.8+"
- exit 1
- fi
-
- JAVA_VERSION=$(java -version 2>&1 | head -n 1 | cut -d'"' -f2)
- print_message $BLUE "检测到Java版本: $JAVA_VERSION"
- }
-
- # 检查应用JAR文件
- check_jar() {
- if [ ! -f "$APP_JAR" ]; then
- print_message $RED "错误: 未找到应用JAR文件: $APP_JAR"
- print_message $YELLOW "请确保在正确的目录下运行此脚本"
- exit 1
- fi
- print_message $GREEN "找到应用JAR文件: $APP_JAR"
- }
-
- # 检查配置文件
- check_config() {
- if [ -f "./application.yml" ]; then
- print_message $GREEN "找到外部配置文件: ./application.yml"
- print_message $BLUE "Spring Boot将自动使用外部配置文件"
- else
- print_message $YELLOW "未找到外部配置文件 ./application.yml,将使用JAR包内的默认配置"
- fi
- }
-
- # 创建日志目录
- create_log_dir() {
- if [ ! -d "$LOG_DIR" ]; then
- mkdir -p "$LOG_DIR"
- print_message $BLUE "创建日志目录: $LOG_DIR"
- fi
- }
-
- # 检查应用是否已运行
- check_running() {
- if [ -f "$PID_FILE" ]; then
- PID=$(cat "$PID_FILE")
- if ps -p $PID > /dev/null 2>&1; then
- print_message $YELLOW "应用已在运行中,PID: $PID"
- return 0
- else
- print_message $YELLOW "发现无效的PID文件,正在清理..."
- rm -f "$PID_FILE"
- fi
- fi
- return 1
- }
-
- # 启动应用
- start_app() {
- print_message $BLUE "正在启动 $APP_NAME..."
-
- # 检查配置文件
- check_config
-
- # 启动应用
- nohup java $JVM_OPTS -jar "$APP_JAR" > "$LOG_FILE" 2>&1 &
-
- # 获取进程ID
- PID=$!
- echo $PID > "$PID_FILE"
-
- # 等待应用启动
- print_message $BLUE "应用启动中,PID: $PID"
- sleep 3
-
- # 检查应用是否成功启动
- if ps -p $PID > /dev/null 2>&1; then
- print_message $GREEN "$APP_NAME 启动成功!"
- print_message $GREEN "访问地址: http://localhost:$APP_PORT$APP_CONTEXT_PATH"
- print_message $GREEN "API文档: http://localhost:$APP_PORT$APP_CONTEXT_PATH/swagger-ui.html"
- print_message $GREEN "日志文件: $LOG_FILE"
- print_message $GREEN "PID文件: $PID_FILE"
- else
- print_message $RED "应用启动失败,请检查日志文件: $LOG_FILE"
- rm -f "$PID_FILE"
- exit 1
- fi
- }
-
- # 停止应用
- stop_app() {
- if [ -f "$PID_FILE" ]; then
- PID=$(cat "$PID_FILE")
- if ps -p $PID > /dev/null 2>&1; then
- print_message $BLUE "正在停止 $APP_NAME (PID: $PID)..."
- kill $PID
-
- # 等待进程结束
- for i in {1..30}; do
- if ! ps -p $PID > /dev/null 2>&1; then
- print_message $GREEN "$APP_NAME 已停止"
- rm -f "$PID_FILE"
- return 0
- fi
- sleep 1
- done
-
- # 强制杀死进程
- print_message $YELLOW "应用未正常停止,正在强制终止..."
- kill -9 $PID
- rm -f "$PID_FILE"
- print_message $GREEN "$APP_NAME 已强制停止"
- else
- print_message $YELLOW "应用未在运行"
- rm -f "$PID_FILE"
- fi
- else
- print_message $YELLOW "未找到PID文件,应用可能未在运行"
- fi
- }
-
- # 重启应用
- restart_app() {
- print_message $BLUE "正在重启 $APP_NAME..."
- stop_app
- sleep 2
- start_app
- }
-
- # 查看应用状态
- status_app() {
- if [ -f "$PID_FILE" ]; then
- PID=$(cat "$PID_FILE")
- if ps -p $PID > /dev/null 2>&1; then
- print_message $GREEN "$APP_NAME 正在运行,PID: $PID"
- print_message $GREEN "访问地址: http://localhost:$APP_PORT$APP_CONTEXT_PATH"
- else
- print_message $RED "$APP_NAME 未在运行(PID文件存在但进程不存在)"
- rm -f "$PID_FILE"
- fi
- else
- print_message $YELLOW "$APP_NAME 未在运行"
- fi
- }
-
- # 查看日志
- view_logs() {
- if [ -f "$LOG_FILE" ]; then
- print_message $BLUE "显示最新日志 (最后50行):"
- echo "----------------------------------------"
- tail -n 50 "$LOG_FILE"
- echo "----------------------------------------"
- else
- print_message $YELLOW "日志文件不存在: $LOG_FILE"
- fi
- }
-
- # 显示帮助信息
- show_help() {
- echo "福泉WebAPI 管理脚本"
- echo ""
- echo "用法: $0 {start|stop|restart|status|logs|help}"
- echo ""
- echo "命令:"
- echo " start - 启动应用"
- echo " stop - 停止应用"
- echo " restart - 重启应用"
- echo " status - 查看应用状态"
- echo " logs - 查看应用日志"
- echo " help - 显示此帮助信息"
- echo ""
- echo "配置:"
- echo " 应用JAR: $APP_JAR"
- echo " 端口: $APP_PORT"
- echo " 上下文路径: $APP_CONTEXT_PATH"
- echo " 日志文件: $LOG_FILE"
- }
-
- # 主函数
- main() {
- case "$1" in
- start)
- check_java
- check_jar
- create_log_dir
- if check_running; then
- exit 0
- fi
- start_app
- ;;
- stop)
- stop_app
- ;;
- restart)
- check_java
- check_jar
- create_log_dir
- restart_app
- ;;
- status)
- status_app
- ;;
- logs)
- view_logs
- ;;
- help|--help|-h)
- show_help
- ;;
- *)
- print_message $RED "错误: 未知命令 '$1'"
- echo ""
- show_help
- exit 1
- ;;
- esac
- }
-
- # 执行主函数
- main "$@"
|