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
读后感
来这里找我交流
-
QQ群:330374464
-
公众号:软件测试资源站(ID:testpu)
主攻测开及接口自动化方向,分享爬虫获取的稀缺精品资源,欢迎关注微信获取。