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