#!/bin/bash
MODULE=$1
ENV=$2
IS_PRINT_LOG=$3
PORT=1
case "$MODULE" in
"blade-gateway")
PORT=8000
;;
"blade-user")
PORT=8017
;;
"blade-team")
PORT=8016
;;
"blade-system")
PORT=8015
;;
"blade-log")
PORT=8013
;;
"blade-instrument")
PORT=8012
;;
"blade-customer")
PORT=8011
;;
"blade-auth")
PORT=8008
;;
"blade-resource")
PORT=8009
;;
"blade-develop")
PORT=10002
;;
*)
echo "Unknown"
;;
esac
# 启动日志
DIR=~/projects/$MODULE/
LOG_PATH=$DIR/log
RESTART_LOG=$LOG_PATH/restart-$MODULE.log
echo '================================' >> $RESTART_LOG
echo `date +%Y%m%d' '%H:%M:%S` >> $RESTART_LOG
echo '================================' >> $RESTART_LOG
echo "PORT: "$PORT >> $RESTART_LOG
echo "MODULE: "$MODULE >> $RESTART_LOG
# 检查文件夹是否存在
cd $DIR
echo 'PWD: '$(pwd) >> $RESTART_LOG
if [ ! -d "$LOG_PATH" ]; then
echo "文件夹不存在,正在创建..."
mkdir -p "$LOG_PATH"
echo "文件夹已创建: $LOG_PATH"
else
echo "文件夹已存在: $LOG_PATH"
fi
if [ "$4" = "1" ]
then
cp 20*-$MODULE.jar release/$MODULE.jar
fi
# 检查文件夹是否存在
DIR_PATH="$DIR/history"
if [ ! -d "$DIR_PATH" ]; then
echo "文件夹不存在,正在创建..."
mkdir -p "$DIR_PATH"
echo "文件夹已创建: $DIR_PATH"
else
echo "文件夹已存在: $DIR_PATH"
fi
# 备份上次的发布到历史文件夹
mv $DIR/*.jar $DIR/history
echo '================after mv 1================' >> $RESTART_LOG
# 重命名发布文件并且移动到 ~/projects 文件夹,等待发布
NEW_NAME=$(date +%Y%m%d%H%M%S)-$MODULE.jar
mv $DIR/release/$MODULE.jar $DIR/release/$NEW_NAME
mv $DIR/release/$NEW_NAME $DIR
echo '================after mv 2================' >> $RESTART_LOG
PID=$(jps | grep $MODULE | cut -f 1 -d ' ')
echo "jps PID: "$PID >> $RESTART_LOG
if [[ $PID =~ ^[0-9]+$ ]]
then
echo 'kill -9 '$PID >> $RESTART_LOG
kill -9 $PID
fi
PID=$(lsof -i :$PORT | head -n 2 | grep java | awk '{printf $2}')
echo "lsof PID: "$PID >> $RESTART_LOG
if [[ $PID =~ ^[0-9]+$ ]]
then
echo 'kill -9 '$PID >> $RESTART_LOG
kill -9 $PID
fi
PID=$(netstat -tpln|grep $PORT | cut -d 'N' -f2 | sed -s "s/\/java//g" | sed -s 's/ //g')
echo "netstat PID: "$PID >> $RESTART_LOG
if [[ $PID =~ ^[0-9]+$ ]]
then
echo 'kill -9 '$PID >> $RESTART_LOG
kill -9 $PID
fi
#启动
nohup /home/agent/jdk/jdk-17.0.10+7/bin/java -jar $DIR/$NEW_NAME --spring.profiles.active=$ENV -Duser.timezone=Asia/Shanghai --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED >> $LOG_PATH/$MODULE-nohup.log 2>&1 &
PID=$!
echo 'THIS PID: '$PID >> $RESTART_LOG
echo 'release result ==> '$tmp >> $LOG_PATH/$MODULE-nohup.log
if [ "$3" = "2" -o "$3" = "3" ]
then
tail -fn 200 $LOG_PATH/$MODULE-nohup.log
fi
# 切换到目标文件夹
HIS_PATH=$DIR/history
echo 'HIS_PATH: '$HIS_PATH >> $RESTART_LOG
cd $HIS_PATH
# 列出目录中的文件,按修改时间排序,并跳过最新的两个文件
files_to_delete=$(ls -t | tail -n +3)
# 循环删除文件
for file in $files_to_delete; do
rm -f "$file"
echo "rm old jar: $file" >> $RESTART_LOG
done