一 使用背景
- 针对部署在linux系统下的weblogic应用。使用shell脚本监测系统运行状态,当系统返回非200时,自动重启服务。
二 脚本实现
- 新建checkRunningStatus.sh,并编辑以下代码。
#!/bin/bash
TARGET_ADDR=$1
TARGET_STATE=0
while true ;do
echo `date +"%Y-%m-%d %H:%M:%S"` start access ${TARGET_ADDR}
if [ $TARGET_STATE -gt 3 ];then
echo `date +"%Y-%m-%d %H:%M:%S"` can not access ${TARGET_ADDR} ,service will reboot!
echo "&&&&&& reboot server!"
nohup ./startWebLogic.sh > nohup.out 2>&1 &
sleep 120
fi
HTTP_CODE=`curl -I -m 10 -o /dev/null -s -w %{http_code}"\n" ${TARGET_ADDR}`
if [ "${HTTP_CODE}" != 200 ];then
echo `date +"%Y-%m-%d %H:%M:%S"` The ${TARGET_STATE} time can not access
echo "****** Error: Down!"
let TARGET_STATE=TARGET_STATE+1
else
echo "###### success"
fi
sleep 10
done
- 代码解释:
- 传入变量 TARGET_ADDR,并定义变量TARGET_STATE=0;
- 循环;
- 打印当前时间以及变量TARGET_ADDR的值;
- 判断变量TARGET_STATE值是否等于3;
1) 等于3,说明连续3次没有调成功,则重启系统。重启的过程中要等待2分钟,防止没有重启完毕又重新访问系统,此时再3次失败,则会再会重启系统。 - curl 访问所要监控的地址,判断是否返回200,如果不是,则TARGET_STATE+1,否则,打印访问成功
- 休眠10秒钟,即每10s执行一次循环
将checkRunningStatus.sh 变成可执行文件
chmod +x checkRunningStatus.sh
如果是windows编辑后的文件,传到linux系统,因为操作系统原因,windows下编辑的文件,会有一些看不见的字符,需要通过命令转换一下,变成unix系统的文件,
bash: ./checkRunningStatus.sh: /bin/bash^M: bad interpreter: 没有那个文件或目录
vim checkRunningStatus.sh
:set ff=unix
5. 执行此脚本nohup ./checkRunningStatus.sh
http://127.0.0.1:8080/INTERFACE/services/listServices > running.log
2>&1 &
6.查看效果
tail -f running.log
7.部署程序时,需要停止此脚本的运行,防止重启过程中,此脚本运行造成重复重启。查看进程并杀死进程
ps -aux | grep checkRunningStatus.sh
kill ID