linux重启java脚本restart_myapp.sh

#!/bin/bash

# 配置变量
APP_NAME="cm-pv"
JAR_PATH="/data/deploy/cmpv/cm-pv.jar"
LOG_DIR="/data/deploy/cmpv/target/blade/log"
LOG_FILE="/data/deploy/cmpv/target/blade/log/restart.log"
APP_PORT=8060

# 创建日志目录(如果不存在)
mkdir -p "$(dirname "$LOG_FILE")"
mkdir -p "$LOG_DIR"

# 记录开始时间
echo "---" >> "$LOG_FILE"
echo "$(date '+%Y-%m-%d %H:%M:%S') - 开始执行重启脚本" >> "$LOG_FILE"

# 1. 停止旧进程
echo "正在停止: $APP_NAME ..." >> "$LOG_FILE"

# 查找进程ID(多种方式)
PID=$(ps -ef | grep "cm-pv.jar" | grep "spring.profiles.active=prod" | grep -v grep | awk '{print $2}')

if [ -z "$PID" ]; then
    # 如果第一种方式没找到,尝试其他方式
    PID=$(ps -ef | grep "java.*cm-pv" | grep -v grep | awk '{print $2}')
fi

if [ ! -z "$PID" ]; then
    echo "找到 PID: $PID" >> "$LOG_FILE"
    kill -9 "$PID"
    echo "已杀死进程: $PID" >> "$LOG_FILE"
    sleep 5
else
    echo "未找到运行中的进程" >> "$LOG_FILE"
fi

# 2. 启动新进程
echo "正在启动 $APP_NAME ..." >> "$LOG_FILE"
cd /data/deploy/cmpv || exit 1

# 备份旧日志
if [ -f nohup.out ]; then
    mv nohup.out "nohup.out.$(date +%Y%m%d%H%M%S)"
fi

# 启动应用
nohup java -jar -Xms8192m -Xmx8192m \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/usr/local \
"$JAR_PATH" \
--spring.profiles.active=prod >> nohup.out 2>&1 &

NEW_PID=$!
echo "应用已启动, 新进程 PID: $NEW_PID" >> "$LOG_FILE"

# 等待一会儿确认进程真的启动了
sleep 3

# 验证进程是否在运行
if ps -p $NEW_PID > /dev/null; then
    echo "进程 $NEW_PID 确认正在运行" >> "$LOG_FILE"
    echo $NEW_PID > /data/deploy/cmpv/app.pid
else
    echo "警告:进程可能启动失败" >> "$LOG_FILE"
    echo "请查看 nohup.out 获取详细信息:" >> "$LOG_FILE"
    tail -20 nohup.out >> "$LOG_FILE"
fi

echo "$(date '+%Y-%m-%d %H:%M:%S') - 重启脚本执行完毕" >> "$LOG_FILE"

 

使用dos2unix转换格式(推荐)

# 安装dos2unix(如果尚未安装)
sudo yum install dos2unix -y   # 对于CentOS/RHEL
# 或者
sudo apt-get install dos2unix -y  # 对于Ubuntu/Debian

# 转换文件格式
dos2unix /data/deploy/cmpv/restart_cmpv.sh

# 然后重新执行
chmod +x /data/deploy/cmpv/restart_cmpv.sh
./restart_cmpv.sh

 

posted on 2025-09-03 10:23  yebinghuai-qq-com  阅读(6)  评论(0)    收藏  举报

导航