Linux 系统下 一键重启所有 jar包 shell 脚本

有时候,一个项目会有多个微服务,就是多个jar包同时在跑,如果有一天内部网络服务器机房断电了,所有机器都关闭了,这个时候如果重启jar服务很麻烦,如果有100多个jar包,可能需要很多时间去重启。所以,就有了这个需求。

1、一键批量重启所有jar包

使用方法很简单,直接执行 sh 文件,后面跟上要执行的参数即可;

\[start|stop|restart|status\],分别代表,启动|停止|重启|状态;
示列:./statusAll.sh stop

下面是正式的脚本,只要替换文件开头的jar包名称,目录,端口和脚本中的变量名称即可,其它的均不用改动。

#!/bin/bash
PROJECT_NAME=statusAll
AAblitemall=Ablitemall-all-0.1.0-exec.jar
AABjob=ABjob-service-0.1.0-exec.jar
ABpaybc=ABpaybc-service-0.0.1.jar
NOBOOY=NOBOOY-web-0.1.0-exec.jar
MDYC=MDYC-demo-service.jar
UIIS=UIIS-0.0.1-SNAPSHOT.jar
 
DIR=/data/api
 
Ablitemall_port=100078
ABjob_port=100099
ABpaybc_port=10000
NOBOOY_port=8009
MDYC_port=8083
UIIS_port=12603
UIIS_port=8004
 
:<<!
/**
* by:西边人。公众号:软件测试资源站(ID:testpu)
* 202001024
*/
 
脚本使用方法:
\[start|stop|restart|status\],分别代表,启动|停止|重启|状态
./statusAll.sh stop
 
!
 
case "$1" in
 
start)
        ## Ablitemall
        echo "========== 【 开始启动 Ablitemall jar包 】 =========="
        source /etc/profile
        cd $DIR/Ablitemall-all
        nohup java -jar $Ablitemall >/dev/null &
        Ablitemall_pid=\`ps -ef | grep -w $Ablitemall | grep -v "grep" | awk '{print $2}'\`
        if \[ -n "$Ablitemall_pid" \]; then
        echo "Ablitemall pid is $Ablitemall_pid"
        sleep 3
            echo -e "【 Ablitemall-all jar包 启动成功 】\\n"
        else
            echo -e "【 Ablitemall-all jar包 启动失败 】\\n"
        fi
 
        ## ABjob
        echo "========== 【 开始启动 ABjob jar包 】 =========="
        source /etc/profile
        cd $DIR/ABjob-service
        nohup java -jar $ABjob >/dev/null &
        ABjob_pid=\`ps -ef | grep -w $ABjob | grep -v "grep" | awk '{print $2}'\`
        if \[ -n "$ABjob_pid" \]; then
        echo "ABjob pid is $ABjob_pid"
        sleep 3
            echo -e "【 ABjob jar包 启动成功 】\\n"
        else
            echo -e "【 ABjob jar包 启动失败 】\\n"
        fi
 
        ## ABpaybc
        echo "========== 【 开始启动 ABpaybc jar包 】 =========="
        source /etc/profile
        cd $DIR/Ablitemall-ABpaybc
        nohup java -jar $ABpaybc >/dev/null &
        ABpaybc_pid=\`ps -ef | grep -w $ABpaybc | grep -v "grep" | awk '{print $2}'\`
        if \[ -n "$ABpaybc_pid" \]; then
        echo "ABpaybc pid is $ABpaybc_pid"
        sleep 3
            echo -e "【 ABpaybc jar包 启动成功 】\\n"
        else
            echo -e "【 ABpaybc jar包 启动失败 】\\n"
        fi
 
        ## NOBOOY
        echo "========== 【 开始启动 NOBOOY jar包 】 =========="
        source /etc/profile
        cd $DIR/Ablitemall-NOBOOY
        nohup java -jar $NOBOOY >/dev/null &
        NOBOOY_pid=\`ps -ef | grep -w $NOBOOY | grep -v "grep" | awk '{print $2}'\`
        if \[ -n "$NOBOOY_pid" \]; then
        echo "NOBOOY pid is $NOBOOY_pid"
        sleep 3
            echo -e "【 NOBOOY jar包 启动成功 】\\n"
        else
            echo -e "【 NOBOOY jar包 启动失败 】\\n"
        fi
 
        ## MDYC
        echo "========== 【 开始启动 MDYC jar包 】 =========="
        source /etc/profile
        cd $DIR/Ablitemall-MDYC
        nohup java -jar $MDYC >/dev/null &
        MDYC_pid=\`ps -ef | grep -w $MDYC | grep -v "grep" | awk '{print $2}'\`
        if \[ -n "$MDYC_pid" \]; then
        echo "MDYC pid is $MDYC_pid"
        sleep 3
            echo -e "【 MDYC jar包 启动成功 】\\n"
        else
            echo -e "【 MDYC jar包 启动失败 】\\n"
        fi
 
        ## UIIS
        echo "========== 【 开始启动 UIIS jar包 】 =========="
        source /etc/profile
        cd $DIR/Ablitemall-UIIS
        nohup java -jar $UIIS >/dev/null &
        UIIS_pid=\`ps -ef | grep -w $UIIS | grep -v "grep" | awk '{print $2}'\`
        if \[ -n "$UIIS_pid" \]; then
        echo "UIIS pid is $UIIS_pid"
        sleep 3
            echo -e "【 UIIS jar包 启动成功 】\\n"
        else
            echo -e "【 UIIS jar包 启动失败 】\\n"
        fi
 
        echo "========== state函数本次 运行完成 =========="
        ;;
 
stop)
        ## Ablitemall
        if ps -ef|grep $Ablitemall |grep -v "grep" &>/dev/null; then
        pid=\`ps -ef | grep $Ablitemall | grep -v "grep" | awk '{print $2}'\`
            kill -9 ${pid}
            echo "【 Ablitemall jar包 停止成功】"
        else
            echo "========== 【 Ablitemall jar包进程不存在,无需停止 】=========="
        fi
 
        ## ABjob
        if ps -ef|grep $ABjob |grep -v "grep" &>/dev/null; then
        pid=\`ps -ef | grep $ABjob | grep -v "grep" | awk '{print $2}'\`
            kill -9 ${pid}
            echo "【 ABjob jar包 停止成功】"
        else
            echo "========== 【 ABjob jar包进程不存在,无需停止 】=========="
        fi
 
        ## ABpaybc
        if ps -ef|grep $ABpaybc |grep -v "grep" &>/dev/null; then
        pid=\`ps -ef | grep $ABpaybc | grep -v "grep" | awk '{print $2}'\`
            kill -9 ${pid}
            echo "【 ABpaybc jar包 停止成功】"
        else
            echo "========== 【 ABpaybc jar包进程不存在,无需停止 】=========="
        fi
 
        ## NOBOOY
        if ps -ef|grep $NOBOOY |grep -v "grep" &>/dev/null; then
        pid=\`ps -ef | grep $NOBOOY | grep -v "grep" | awk '{print $2}'\`
            kill -9 ${pid}
            echo "【 NOBOOY jar包 停止成功】"
        else
            echo "========== 【 NOBOOY jar包进程不存在,无需停止 】=========="
        fi
 
        ## MDYC
        if ps -ef|grep $MDYC |grep -v "grep" &>/dev/null; then
        pid=\`ps -ef | grep $MDYC | grep -v "grep" | awk '{print $2}'\`
            kill -9 ${pid}
            echo "【 MDYC jar包 停止成功】"
        else
            echo "========== 【 MDYC jar包进程不存在,无需停止 】=========="
        fi
 
        ## UIIS
        if ps -ef|grep $UIIS |grep -v "grep" &>/dev/null; then
        pid=\`ps -ef | grep $UIIS | grep -v "grep" | awk '{print $2}'\`
            kill -9 ${pid}
            echo "【 UIIS jar包 停止成功】"
        else
            echo "========== 【 UIIS jar包进程不存在,无需停止 】=========="
        fi
        ;;
 
restart)
        $0 stop
        sleep 10
        $0 start
        echo "【 所有jar包重启完成】"
        ;;
 
status)
        ## Ablitemall
        echo "========== 【 开始检查 Ablitemall jar包 运行状态 】 =========="
        Ablitemall_pid=\`ps -ef | grep -w $Ablitemall | grep -v "grep" | awk '{print $2}'\`
        if \[ -n "$Ablitemall_pid" \]; then
            echo -e "【 Ablitemall jar包 运行正常 】\\n"
        else
            echo -e "【 Ablitemall jar包 运行异常 】\\n"
        fi
 
        ## ABjob
        echo "========== 【 开始检查 ABjob jar包 运行状态 】 =========="
        ABjob_pid=\`ps -ef | grep -w $ABjob | grep -v "grep" | awk '{print $2}'\`
        if \[ -n "$Ablitemall_pid" \]; then
            echo -e "【 ABjob jar包 运行正常 】\\n"
        else
            echo -e "【 ABjob jar包 运行异常 】\\n"
        fi
 
        ## ABpaybc
        echo "========== 【 开始检查 ABpaybc jar包 运行状态 】 =========="
        ABpaybc_pid=\`ps -ef | grep -w $ABpaybc | grep -v "grep" | awk '{print $2}'\`
        if \[ -n "$ABpaybc_pid" \]; then
            echo -e "【 ABpaybc jar包 运行正常 】\\n"
        else
            echo -e "【 ABpaybc jar包 运行异常 】\\n"
        fi
 
        ## NOBOOY
        echo "========== 【 开始检查 NOBOOY jar包 运行状态 】 =========="
        NOBOOY_pid=\`ps -ef | grep -w $NOBOOY | grep -v "grep" | awk '{print $2}'\`
        if \[ -n "$NOBOOY_pid" \]; then
            echo -e "【 NOBOOY jar包 运行正常 】\\n"
        else
            echo -e "【 NOBOOY jar包 运行异常 】\\n"
        fi
 
        ## MDYC
        echo "========== 【 开始检查 MDYC jar包 运行状态 】 =========="
        MDYC_pid=\`ps -ef | grep -w $MDYC | grep -v "grep" | awk '{print $2}'\`
        if \[ -n "$MDYC_pid" \]; then
            echo -e "【 MDYC jar包 运行正常 】\\n"
        else
            echo -e "【 MDYC jar包 运行异常 】\\n"
        fi
 
        ## UIIS
        echo "========== 【 开始检查 UIIS jar包 运行状态 】 =========="
        UIIS_pid=\`ps -ef | grep -w $UIIS | grep -v "grep" | awk '{print $2}'\`
        if \[ -n "$UIIS_pid" \]; then
            echo -e "【 UIIS jar包 运行正常 】\\n"
        else
            echo -e "【 UIIS jar包 运行异常 】\\n"
        fi
 
        echo "========== state函数本次 运行完成 =========="
        ;;
esac
exit 0

2、单个jar包一键重启、停止、查看状态等 shell 脚本

这个写法比较简洁,跟上面的差不多类似,只是单个jar的重启和停止等。

下面是正式的 shell 脚本

#!/bin/sh
 
# shell样例及解释,使用时请去掉注释,防止乱码
 
command='java -Xms256m -Xmx1024m -jar ./smart-monitor-api-0.0.1-SNAPSHOT.jar'
log_dir="/home/dev/deploy/zhihui/smart/logs/monitor"
log\_file="log\_dir/smart-monitor.log"
 
# -p:如果目录已经存在,则不会有错误提示。若父目录不存在,将会创建父目录。该选项常用于创建级联目录
mkdir -p $log_dir
 
start(){
    if \[ "$log_file" != "" \]; then
        exec $command  >> "$log_file" 2>&1 &	 
    else
        exec $command &
    fi
}
 
stop(){  
 #{print $2}:在ps到这个进程后获取进程pid,即下行的22704
 #smart  22704 22616  1 11:27 pts/20   00:05:47 java -jar smart-monitor-api-0.0.1-SNAPSHOT.jar
 #grep -v "grep" :排除掉grep本身搜索进程pid,否则搜索的程序只有一个,但是搜索结果却有两个pid
 ps -ef | grep "$command" |grep -v "grep"| awk '{print $2}' | while read pid   
 do 
    #ps --no-heading $pid | wc -l:通过进程号PID来查找进程是否存在,输出为0表示不存在,输出=1,表示存在,因为进程号不可能重复,所以输出肯定非0即1 
    C_PID=$(ps --no-heading $pid | wc -l)
    echo "CURRENT PID=$pid"
    if \[ "$C_PID" == "1" \]; then
        echo "PID=$pid Ready to end"
        kill -9 $pid
        echo "PID=$pid end"
    else
        echo "PID=$pid does not exist"
    fi
 done
}
 
# ./run.sh start:根据脚本命令参数,确定执行的命令
case "$1" in  
start)  
start  
;;  
stop)  
stop  
;;    
restart)  
stop  
start  
;;  
*)  
printf 'Usage: %s {start|stop|restart}\\n' "$prog"  
exit 1  
;;  
esac

读后感

来这里找我交流

posted @ 2021-10-12 10:43  西边人  阅读(1499)  评论(0编辑  收藏  举报