?一:在阿里云服務器安全組已經設置了端口授權對象:
正確命令:
nohup java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9998 -jar -Duser.timezone=GMT+08 -Xms256m -Xmx256m /opt/projects/*/*/*-starter-1.0-SNAPSHOT.jar? --spring.profiles.active=test > sys01.log 2>&1 &
執行上面不成功時,執行下面命令【主要設置標紅的地方】:
nohup java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=0.0.0.0:9998 -jar -Duser.timezone=GMT+08 -Xms256m -Xmx256m /opt/projects/*/*/*-starter-1.0-SNAPSHOT.jar --server.address=0.0.0.0? --spring.profiles.active=test > sys01.log 2>&1 &
然后本地遠程Debug,ok?
二:編輯啟動命令:
創建文件start.sh,并進行授權 chmod +x start.sh
先發送 TERM 信號讓應用優雅關閉,只有在超時后才使用 KILL 強制終止
#!/bin/bash
JAR_NAME="**-admin.jar"
LOG_FILE="/tmp/${JAR_NAME}.log"echo "Stopping procedure: ${JAR_NAME}"
# 獲取匹配的進程ID
pid=$(ps -ef | grep java | grep "${JAR_NAME}" | awk '{print $2}')if [ -n "$pid" ]; then
echo "Found old process with PID: $pid, attempting to stop it..."
kill -TERM $pid ?# 發送TERM信號,允許程序優雅關閉
# 等待最多30秒讓進程退出
timeout=30
while [ $timeout -gt 0 ] && kill -0 $pid 2>/dev/null; do
echo "Waiting for process $pid to terminate... ($timeout seconds left)"
sleep 1
((timeout--))
done
# 如果進程仍然存在,則強制殺死
if kill -0 $pid 2>/dev/null; then
echo "Force killing process $pid"
kill -9 $pid
sleep 2 ?# 給系統一點時間清理資源
else
echo "Process $pid stopped gracefully"
fi
else
echo "No running process found for ${JAR_NAME}"
fi# 啟動新服務
echo "Starting new instance of ${JAR_NAME}"
nohup java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9998 \
-jar \
-XX:MetaspaceSize=512m \
-XX:MaxMetaspaceSize=512m \
-Xms1024m \
-Xmx1024m \
-Xmn128m \
-Xss256k \
-XX:SurvivorRatio=8 \
-XX:+UseConcMarkSweepGC \
/www/wwwroot/api/${JAR_NAME} \
--spring.profiles.active=dev > ${LOG_FILE} 2>&1 &echo "New instance started in background. Logs redirected to ${LOG_FILE}"