监听服务器jar运行,及重启脚本
Posted 捡黄金的少年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了监听服务器jar运行,及重启脚本相关的知识,希望对你有一定的参考价值。
1、简单监听服务并重启脚本
业务需求,服务器要监听停止的jar服务,十分钟一次监听,出现停止就重启服务
#!/bin/bash
# “#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行
# 变量
jarName=quartz_cgq_5501.jar
jarName_TWO=quartz_cgq_5506.jar
jarName_THREE=suoxin_quartz_cgq_5503.jar
#配置服务日志文件目录路径
LOG_FILE=/usr/local/kuangshan/jiaoben/quartz_cgq_5501.log
LOG_FILE_TWO=/usr/local/kuangshan/jiaoben/quartz_cgq_5506.log
LOG_FILE_THREE=/usr/local/kuangshan/jiaoben/suoxin_quartz_cgq_5503.log
jarUrl=/usr/local/kuangshan/
#webUrl=https://www.baidu.com/
# grep -v grep: 在文档中过滤掉包含有grep字符的行
# awk 'print $2': 按空格截取第二个
#pid=`ps -ef|grep $jarName |grep -v grep| awk 'print $2'`
# wc -l: jar包进程的数量
num=`ps -ef|grep $jarName |grep -v grep| awk 'print $2'| wc -l`
MonitorFunction()
# 输出文本
echo "[info]进入监控脚本"`date +'%Y-%m-%d %H:%M:%S'`
# -eq: 等于
if [[ $num -eq 0 ]]; then
echo "[error]进程一,不存在,重启"`date +'%Y-%m-%d %H:%M:%S'`
nohup java -jar $jarUrl/$jarName > $LOG_FILE 2>&1 &
else
echo "[info]页面一,存在不用重启,time="`date +'%Y-%m-%d %H:%M:%S'`
fi
MonitorFunction
numTwo=`ps -ef|grep $jarName_TWO |grep -v grep| awk 'print $2'| wc -l`
MonitorFunctionTwo()
# 输出文本
echo "[info]进入监控脚本二"`date +'%Y-%m-%d %H:%M:%S'`
# -eq: 等于
if [[ $numTwo -eq 0 ]]; then
echo "[error]进程二,不存在,重启"`date +'%Y-%m-%d %H:%M:%S'`
# >> /dev/null : jar包生成日志不打印到此脚本日志中
nohup java -jar $jarUrl/$jarName_TWO > $LOG_FILE_TWO 2>&1 &
else
echo "[info]页面二,存在不用重启,time="`date +'%Y-%m-%d %H:%M:%S'`
fi
MonitorFunctionTwo
numThree=`ps -ef|grep $jarName_THREE |grep -v grep| awk 'print $2'| wc -l`
MonitorFunctionThree()
# 输出文本
echo "[info]进入监控脚本三"`date +'%Y-%m-%d %H:%M:%S'`
# -eq: 等于
if [[ $numThree -eq 0 ]]; then
echo "[error]进程三,不存在,重启"`date +'%Y-%m-%d %H:%M:%S'`
# >> /dev/null : jar包生成日志不打印到此脚本日志中
nohup java -jar $jarUrl/$jarName_THREE > $LOG_FILE_THREE 2>&1 &
else
echo "[info]页面三存在不用重启,time="`date +'%Y-%m-%d %H:%M:%S'`
fi
MonitorFunctionThree
2、凌晨重启jar服务脚本
#!/bin/bash
#执行bash shell配置
source ~/.bash_profile
#配置服务jar包文件路径
SERVICE_NAME=/usr/local/kuangshan/quartz_cgq_5501.jar
SERVICE_NAME_TWO=/usr/local/kuangshan/quartz_cgq_5506.jar
SERVICE_NAME_THREE=/usr/local/kuangshan/suoxin_quartz_cgq_5503.jar
#配置服务日志文件目录路径
LOG_FILE=/usr/local/kuangshan/jiaoben/quartz_cgq_5501.log
LOG_FILE_TWO=/usr/local/kuangshan/jiaoben/quartz_cgq_5506.log
LOG_FILE_THREE=/usr/local/kuangshan/jiaoben/suoxin_quartz_cgq_5503.log
#杀死指定jar包进程
ps -ef|grep $SERVICE_NAME |grep -v grep|cut -c 9-15|xargs kill -9
ps -ef|grep $SERVICE_NAME_TWO |grep -v grep|cut -c 9-15|xargs kill -9
ps -ef|grep $SERVICE_NAME_THREE |grep -v grep|cut -c 9-15|xargs kill -9
#启动jar包
nohup java -jar -Xmx10240m -Xms10240m -Xss2m $SERVICE_NAME > $LOG_FILE 2>&1 &
nohup java -jar -Xmx10240m -Xms10240m -Xss2m $SERVICE_NAME_TWO > $LOG_FILE_TWO 2>&1 &
nohup java -jar -Xmx10240m -Xms10240m -Xss2m $SERVICE_NAME_THREE > $LOG_FILE_THREE 2>&1 &
echo "服务重启时间:"`date`>>restart.out
3、先测试脚本是否能运行
给脚本赋权
chmod a+x monitor.sh
运行脚本文件
sh monitor.sh
如果出现下面错误,则输入命令,转化为unix格式
sed -i 's/\\r//' monitor.sh
3、使用crontab的定时任务
crontab -e
0 0 * * *表示凌晨执行
*/10 * * * * 表示十分钟执行一次
0 0 * * * bash /usr/local/kuangshan/jiaoben/springStart.sh >> /usr/local/kuangshan/jiaoben/log.log
*/10 * * * * bash /usr/local/kuangshan/jiaoben/monitor.sh >> /usr/local/kuangshan/jiaoben/logTWO.log
查看编辑的定时任务
crontab -l
4、重启文件夹下所有jar包脚本
#!/bin/bash
yy=$(ls **.jar)
for m in $yy; do
echo $m
numThree=$(ps -ef | grep $m | grep -v grep | awk 'print $2' | wc -l)
echo “进程值为=”$numThree
if [[ $numThree -eq 0 ]]; then
echo "-----" $m"-----进程不存在******重启中.......*****,time="$(date +'%Y-%m-%d %H:%M:%S')
nohup java -jar $m >$m".log" 2>&1 &
else
echo "-----" $m"-----进程存在******不用重启*****,time="$(date +'%Y-%m-%d %H:%M:%S')
fi
done
5、mongdb启动停止脚本
#!/bin/bash
case $1 in
"start" )/kkb/install/mongodb-linux-x86_64-4.0.18/bin/mongod -f /kkb/install/mongodb-linux-x86_64-4.0.18/conf/mongo.conf
echo "start mongo..."
ps -ef | grep momgodb;;
"stop")/kkb/install/mongodb-linux-x86_64-4.0.18/bin/mongod --shutdown -f /kkb/install/mongodb-linux-x86_64-4.0.18/conf/mongo.conf
echo "stop mongo..."
ps -ef | grep momgodb
;;
esac
6、重启jar包脚本start.sh
sh start.sh:查看和start.sh 同目录的jar情况,如果没有进程则启动jar包
sh start.sh ***.jar 重启jar包,如果jar进程不存在则启动,如果存在则杀死进程再启动
#!/bin/bash
DB_NAME=$1
if [ -z "$DB_NAME" ]
then
yy=$(ls **.jar)
for m in $yy; do
echo $m
numThree=$(ps -ef | grep $m | grep -v grep | awk 'print $2' | wc -l)
echo “进程值为=”$numThree
if [[ $numThree -eq 0 ]]; then
echo "-----" $m"-----进程不存在******重启中.......*****,time="$(date +'%Y-%m-%d %H:%M:%S')
nohup java -jar $m >$m".log" 2>&1 &
echo "-----" $m"-----进程单独******重启完毕.......*****,time="$(date +'%Y-%m-%d %H:%M:%S')
else
echo "-----" $m"-----进程存在******不用重启*****,time="$(date +'%Y-%m-%d %H:%M:%S')
fi
done
else
numFour=$(ps -ef | grep $1 | grep -v grep | awk 'print $2' | wc -l)
echo “进程值为=”$numFour
if [[ $numFour -eq 0 ]]; then
echo "-----" $DB_NAME"-----进程单独******重启中.......*****,time="$(date +'%Y-%m-%d %H:%M:%S')
nohup java -jar $DB_NAME >$DB_NAME".log" 2>&1 &
echo "-----" $DB_NAME"-----进程单独******重启完毕.......*****,time="$(date +'%Y-%m-%d %H:%M:%S')
else
pid=`ps -ef | grep $DB_NAME | grep -v "grep" | awk 'print $2' `
echo “进程为=”$DB_NAME
echo “进程ID值为=”$pid
echo “进字符串长度为=”$#pid[0]
yy=($pid)
pidnew=$yy[0]
echo “截取第一个进程为:“$pidnew
echo "-----" $DB_NAME"-----正在杀死进程******中.......*****,time="$(date +'%Y-%m-%d %H:%M:%S')
# ps -ef|grep $DB_NAME |grep -v grep|cut -c 9-15|xargs kill -9
kill -9 $pidnew
echo "-----" $DB_NAME"-----进程单独******重启中.......*****,time="$(date +'%Y-%m-%d %H:%M:%S')
nohup java -jar $DB_NAME >$DB_NAME".log" 2>&1 &
echo "-----" $DB_NAME"-----进程单独******重启完毕.......*****,time="$(date +'%Y-%m-%d %H:%M:%S')
ps aux|grep $DB_NAME
fifi
以上是关于监听服务器jar运行,及重启脚本的主要内容,如果未能解决你的问题,请参考以下文章