应用重启脚本

发布时间:2024年01月20日

当我们发布一个应用时,通常我们要先关闭老的应用,然后更新相关软件包再重启这个应用,在关闭的时候粗暴方式是使用kill -9 杀进程,如果项目中有一些数据需要在程序关闭时进行处理,这种方式就有可能导致数据丢失;温和的方式是使用kill -15 杀进程,但是这种方式也有问题,有可能导致进程关闭失败。所以比较好的方式是先使用kill -15 杀进程等待一段时间,如果在这段时间内进程还在运行就使用kill -9 再杀一次进程,而等待时间的长短就取决于你应用关闭处理时需要的时间,下面是我整理的一个关闭重启应用的脚本:

#!/bin/sh

# 最大等待时间(单位秒),超过这个时间长度将使用kill -9 杀进程
MAX_SECOND=30
# 应用名称
APP_NAME="test-1.0-SNAPSHOT.jar"

JAVA_OPTS=""

echo "====== $APP_NAME ======"

pid=$(ps -ef | grep $APP_NAME | grep -v grep | awk '{ print $2 }')

if [ $pid ]; then
    echo "=== begin kill java process, pid is:$pid"
    kill -15 $pid
else
    echo "=== process $pid not exists or stop success"
fi

stime=$(date +%s)
while true;do
    count=`ps -ef|grep $pid|grep -v grep`
    if [ "$?" != "0" ];then
        echo ">>> $pid is stoped!"
        break
    else
        now=$(date +%s)
	    diff=$((now - stime))
	    if [ "$diff" -gt "$MAX_SECOND" ];then
	        kill -9 $pid
            echo ">>> $pid is killed!"
            break
        fi
        echo ">>> $pid is shutting down... $diff s"
    fi
    sleep 1
done

nohup java $JAVA_OPTS -jar $APP_NAME --spring.profiles.active=test >> ./logs/catalina.out 2>&1 &

sleep 2

spid=$(ps -ef | grep $APP_NAME | grep -v grep | awk '{ print $2 }')
if [ $spid ];then
  echo "start success ..."
  echo "pid is: $spid"
else
  echo "start fail ..."
fi
exit 0

文章来源:https://blog.csdn.net/dream_xin2013/article/details/135697882
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。