1. 编写脚本monitor.sh
#!/bin/bash
#jar包地址,应写jar包的绝对路径
RESOURCE_NAME=/root/qwmyuploader/V2.0/my-uploader-0.0.1-SNAPSHOT.jar
result=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${result} ]; then
#服务已经开启,判断是否是僵尸进程
echo ${result}
val=`ps -aux | grep $RESOURCE_NAME| grep -v grep | awk '{print $8}'`
if [ "$val" == "Z" ];then
#僵尸进程
pid = `ps -aux | grep $RESOURCE_NAME| grep -v grep | awk '{print $2}'`
kill -9 $pid
fi
else
#开启服务
#注意应写Java环境的绝对路径/usr/java/jdk1.8.0_212/bin/java
echo hello
#将Java程序中的日志输出到/root/qwmyuploader/V2.0/log文件下
cd /root/qwmyuploader/V2.0/
nohup /usr/java/jdk1.8.0_212/bin/java -jar $RESOURCE_NAME >/dev/null 2>&1 &
sleep 10
echo $RESOURCE_NAME
res=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
echo ${res}
echo start success!
fi
注意: jar包和Java的地址一定要写绝对路径,否则不能启动目标服务!一定要记住是绝对路径哦
2. 测试脚本
#修改monitor.sh权限
chmod +x monitor.sh
#安装dos2unix
yum -y install dos2unix
dos2unix start.sh
./start.sh
#运行monitor.sh
./monitor.sh
3.创建定时任务
之前的博客中写过如何创建定时任务,详见https://blog.youkuaiyun.com/qq_28323595/article/details/108140041第三部分。
4.多进程服务监控
#!/bin/bash
#gm代理py的绝对路径
RESOURCE_NAME=manage
result=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
#当串的长度大于0时为真,进程号不为空
if [ -n "$result" ]; then
#服务已经开启,判断是否是僵尸进程
echo "服务已开启"
echo ${result}
val=`ps -aux | grep $RESOURCE_NAME| grep -v grep | awk '{print $8}'`
if [ "$val" == "Z" ];then
#僵尸进程
echo "存在僵尸进程"
ps -ef|grep $RESOURCE_NAME|grep -v grep|cut -c 9-15|xargs kill -9
fi
else
#开启服务
echo hello
source /alidata/server/nginx/sbin/setting
cd /home/gm_prox
nohup /usr/local/Python-2.7.17/bin/gunicorn -w 4 -b 0.0.0.0:2879 $RESOURCE_NAME:app &
sleep 10
echo $RESOURCE_NAME
res=`ps -ef|grep $RESOURCE_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
echo ${res}
echo start success!
fi