提交 a624d59d authored 作者: PGY's avatar PGY

feat(自动化部署脚本): 增强ujava2启动脚本的日志记录和进程管理功能

- 添加日志文件路径定义和确保日志目录存在的逻辑
- 调整重试配置参数:将重试间隔从30秒减少到20秒以避免执行时间过长
- 改进服务停止逻辑:先发送SIGTERM信号,等待1秒后检查进程状态再决定是否强制杀死
- 在服务重启和启动函数中添加关闭锁文件描述符的逻辑,防止子进程继承导致锁无法释放
上级 a41636a0
...@@ -8,6 +8,10 @@ ...@@ -8,6 +8,10 @@
# ========== 脚本并发控制 ========== # ========== 脚本并发控制 ==========
LOCK_FILE="/tmp/ujava2-startup.lock" LOCK_FILE="/tmp/ujava2-startup.lock"
LOG_FILE="/data/logs/ujava2-service-manager.log"
# 确保日志目录存在
mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null
exec 200>"$LOCK_FILE" exec 200>"$LOCK_FILE"
flock -n 200 || { flock -n 200 || {
echo "$(date '+%Y-%m-%d %H:%M:%S') [WARNING] 另一个实例正在运行,退出" | tee -a "$LOG_FILE" echo "$(date '+%Y-%m-%d %H:%M:%S') [WARNING] 另一个实例正在运行,退出" | tee -a "$LOG_FILE"
...@@ -15,11 +19,9 @@ flock -n 200 || { ...@@ -15,11 +19,9 @@ flock -n 200 || {
} }
# ==================================== # ====================================
LOG_FILE="/data/logs/ujava2-service-manager.log"
# ========== API检查重试配置参数 ========== # ========== API检查重试配置参数 ==========
RETRY_MAX_COUNT=3 # 最大重试次数 RETRY_MAX_COUNT=3 # 最大重试次数(减少以避免执行时间过长)
RETRY_INTERVAL=30 # 重试间隔(秒) RETRY_INTERVAL=20 # 重试间隔(秒)
API_REQUEST_TIMEOUT=10 # API请求超时(秒) API_REQUEST_TIMEOUT=10 # API请求超时(秒)
SERVER_IP="${JAVA_SERVER_IP:-$(hostname -I | awk '{print $1}')}" # 服务器IP(优先使用环境变量,否则自动获取本机IP) SERVER_IP="${JAVA_SERVER_IP:-$(hostname -I | awk '{print $1}')}" # 服务器IP(优先使用环境变量,否则自动获取本机IP)
API_URL_1="https://${SERVER_IP}/platform/api/code" # API检查地址1 API_URL_1="https://${SERVER_IP}/platform/api/code" # API检查地址1
...@@ -277,7 +279,9 @@ stop_service() { ...@@ -277,7 +279,9 @@ stop_service() {
[ -z "$pid" ] && return 0 [ -z "$pid" ] && return 0
echo "$(timestamp) [STOP] $service_key (PID: $pid)" | tee -a "$LOG_FILE" echo "$(timestamp) [STOP] $service_key (PID: $pid)" | tee -a "$LOG_FILE"
docker exec "$JAVA_CONTAINER" sh -c "kill $pid && sleep 1 || kill -9 $pid"
# 先发送SIGTERM信号,等待1秒后检查是否还在运行,如果还在则强制杀死
docker exec "$JAVA_CONTAINER" sh -c "kill $pid 2>/dev/null; sleep 1; kill -0 $pid 2>/dev/null && kill -9 $pid 2>/dev/null"
sleep 2 sleep 2
} }
...@@ -374,6 +378,9 @@ restart_host_extapi_service() { ...@@ -374,6 +378,9 @@ restart_host_extapi_service() {
return 1 return 1
} }
# 关闭锁文件描述符,防止子进程继承导致锁无法释放
exec 200>&-
# 加载 /etc/profile 中的环境变量(包括 Java 环境变量),然后执行 run.sh # 加载 /etc/profile 中的环境变量(包括 Java 环境变量),然后执行 run.sh
# 使用 bash -c 确保环境变量在同一 shell 中生效并传递到 run.sh # 使用 bash -c 确保环境变量在同一 shell 中生效并传递到 run.sh
bash -c "source /etc/profile && ./run.sh" & bash -c "source /etc/profile && ./run.sh" &
...@@ -425,6 +432,9 @@ start_malan_service() { ...@@ -425,6 +432,9 @@ start_malan_service() {
return 1 return 1
} }
# 关闭锁文件描述符,防止子进程继承导致锁无法释放
exec 200>&-
# 加载环境变量,然后启动malan # 加载环境变量,然后启动malan
bash -c "source /etc/profile && ./malan" & bash -c "source /etc/profile && ./malan" &
local start_pid=$! local start_pid=$!
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论