|
@@ -0,0 +1,109 @@
|
|
|
|
+#!/bin/bash
|
|
|
|
+
|
|
|
|
+# 定义默认启动模式及路径
|
|
|
|
+SERVER="all"
|
|
|
|
+WEB_CHAT_START_PAGE_JARS="./server"
|
|
|
|
+KILL_TIMEOUT=5 # 等待进程退出的最长时间(秒)
|
|
|
|
+
|
|
|
|
+# 参数处理(支持带.jar后缀和不带的情况)
|
|
|
|
+if [ $# -gt 0 ]; then
|
|
|
|
+ SERVER="${1%.*}" # 去除可能的.jar后缀
|
|
|
|
+fi
|
|
|
|
+
|
|
|
|
+echo "Starting server: $SERVER"
|
|
|
|
+
|
|
|
|
+# 打包阶段
|
|
|
|
+echo "=== Webchat packaging begins ==="
|
|
|
|
+mvn clean package -DskipTests=true
|
|
|
|
+echo "=== Webchat packaging completed ==="
|
|
|
|
+
|
|
|
|
+# 清理并创建jars目录
|
|
|
|
+rm -rf "$WEB_CHAT_START_PAGE_JARS"
|
|
|
|
+mkdir -p "$WEB_CHAT_START_PAGE_JARS"
|
|
|
|
+echo "Old jars removed"
|
|
|
|
+
|
|
|
|
+# 复制所有jar到目标目录
|
|
|
|
+find . -path "*/target/*.jar" -exec cp {} "$WEB_CHAT_START_PAGE_JARS" \;
|
|
|
|
+
|
|
|
|
+cd "$WEB_CHAT_START_PAGE_JARS" || exit 1
|
|
|
|
+
|
|
|
|
+# 定义进程终止函数
|
|
|
|
+kill_old_process() {
|
|
|
|
+ local jar_name=$1
|
|
|
|
+ local pid_list=$(pgrep -f "java.*$jar_name")
|
|
|
|
+
|
|
|
|
+ if [ -n "$pid_list" ]; then
|
|
|
|
+ echo "Found existing process(es) for $jar_name: $pid_list"
|
|
|
|
+
|
|
|
|
+ # 优雅终止
|
|
|
|
+ kill $pid_list
|
|
|
|
+ echo "Sent SIGTERM to process(es), waiting for termination..."
|
|
|
|
+
|
|
|
|
+ # 等待进程退出
|
|
|
|
+ local timeout=0
|
|
|
|
+ while kill -0 $pid_list 2>/dev/null && [ $timeout -lt $KILL_TIMEOUT ]; do
|
|
|
|
+ sleep 1
|
|
|
|
+ ((timeout++))
|
|
|
|
+ done
|
|
|
|
+
|
|
|
|
+ # 强制终止未退出的进程
|
|
|
|
+ if kill -0 $pid_list 2>/dev/null; then
|
|
|
|
+ echo "Force killing process(es)..."
|
|
|
|
+ kill -9 $pid_list
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ # 二次确认
|
|
|
|
+ if pgrep -f "java.*$jar_name" >/dev/null; then
|
|
|
|
+ echo "Error: Failed to kill process for $jar_name!" >&2
|
|
|
|
+ return 1
|
|
|
|
+ fi
|
|
|
|
+ fi
|
|
|
|
+ return 0
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+# 启动逻辑
|
|
|
|
+if [ "$SERVER" == "all" ]; then
|
|
|
|
+ echo "Starting ALL services..."
|
|
|
|
+ for jar in *.jar; do
|
|
|
|
+ service_name="${jar%.*}"
|
|
|
|
+
|
|
|
|
+ # 终止旧进程
|
|
|
|
+ if ! kill_old_process "$jar"; then
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ # 启动新进程
|
|
|
|
+ echo "Starting $service_name..."
|
|
|
|
+ nohup java -jar "$jar" > "${service_name}.log" 2>&1 &
|
|
|
|
+ done
|
|
|
|
+ echo "All services restarted in background."
|
|
|
|
+else
|
|
|
|
+ target_jar="${SERVER}.jar"
|
|
|
|
+ if [ -f "$target_jar" ]; then
|
|
|
|
+ # 终止旧进程
|
|
|
|
+ if ! kill_old_process "$target_jar"; then
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ # 启动新进程
|
|
|
|
+ echo "Starting $target_jar..."
|
|
|
|
+ nohup java -jar "$target_jar" > "${SERVER}.log" 2>&1 &
|
|
|
|
+ echo "Service restarted. Tracking logs:"
|
|
|
|
+ tail -100f "${SERVER}.log"
|
|
|
|
+ else
|
|
|
|
+ echo "Error: Jar file $target_jar not found!"
|
|
|
|
+ echo "Available jars:"
|
|
|
|
+ ls -1 *.jar | sed 's/.jar$//'
|
|
|
|
+ exit 1
|
|
|
|
+ fi
|
|
|
|
+fi
|
|
|
|
+
|
|
|
|
+# 端口冲突检查(备用方案)
|
|
|
|
+check_port_conflict() {
|
|
|
|
+ local port=$1
|
|
|
|
+ if lsof -i :$port &>/dev/null; then
|
|
|
|
+ echo "Port $port is still in use after process restart!" >&2
|
|
|
|
+ return 1
|
|
|
|
+ fi
|
|
|
|
+ return 0
|
|
|
|
+}
|