自动监控url是否可用,如不可用则重启应用,并做相应的报警策略。 发表于 2015-05-04 | 分类于 Shell相关 | | 阅读次数 | 字数统计 646 | 阅读时长 3 先上图\ 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137#!/bin/bash #author: QingFeng#qq: 530035210#blog: http://my.oschina.net/pwd/blog #自动监控url是否可用,如不可用则重启应用,并做相应的报警策略。#缺省的配置如下 logdir=/data/log/check #日志路径log=$logdir/log.log #日志文件 is_font=1 #终端是否打印日志: 1打印 0不打印 is_log=0 #是否记录日志: 1记录 0不记录key="data-camp" #进程关键字exec_stop="/etc/init.d/data-camp stop" #停应用命令exec_start="/etc/init.d/data-camp start" #启动应用命令 datef(){date "+%Y-%m-%d %H:%M:%S"} print_log(){if [[ $is_log -eq 1 ]];then[[ -d $logdir ]] || mkdir -p $logdirecho "[ $(datef) ] $1" >> $logfiif [[ $is_font -eq 1 ]];thenecho -e "[ $(datef) ] $1"fi}#定义重启derestart(){if [[ $1 == "" ]];thenprint_log "$FUNCNAME():应用关键字不能为空"exitfiif [[ $2 == "" ]];thenprint_log "$FUNCNAME():启动文件不能为空"exitfiif [[ $2 == "" ]];thenprint_log "$FUNCNAME():启动参数口不能为空"exitfippid=0ppid=$(ps axu |grep "$1" |grep -v grep |grep -v "$0" |wc -l)$2 $3 ppid=$(ps axu |grep "$1" |grep -v grep |grep -v "$0" |wc -l)echo $ppid > /tmp/restart.numprint_log "$FUNCNAME(): $1的进程数为:$ppid"}#场景一: 当网站返回码不为200,则重启应用.check_code(){if [[ $1 == "" ]];thenprint_log "$FUNCNAME():服务器地址不能为空"exitfiif [[ $2 == "" ]];thenprint_log "$FUNCNAME():服务器端口不能为空"exitfiprint_log "$FUNCNAME():开始检测-[$1:$2]服务器的网站状态返回码."code=$(curl -m 8 -o /dev/null -s -w %{http_code} http://$1:$2/verdict/session/LSGJA52U7CH055974/latest/result)if [[ $code -ne 200 ]];thenprint_log "$FUNCNAME():[$1:$2]服务器的网站状态返回码不正常,开始重启应用--$code."print_log "$FUNCNAME():执行命令: $exec_stop"derestart "$key" "$exec_stop"num2=$(cat /tmp/restart.num)if [[ $num2 -ne 0 ]];thenprint_log "$FUNCNAME():停应用失败."fi print_log "$FUNCNAME():执行命令: $exec_start"sleep 3derestart "$key" "$exec_start"num2=$(cat /tmp/restart.num)if [[ $num2 -eq 0 ]];thenprint_log "$FUNCNAME():启动应用失败."fiprint_log "$FUNCNAME():重启应用成功."elseprint_log "$FUNCNAME():[$1:$2]服务器的网站状态返回码正常--$code."fi }#场景二: 检测网站http返回的时间check_timeout(){if [[ $1 == "" ]];thenprint_log "$FUNCNAME():服务器地址不能为空"exitfiif [[ $2 == "" ]];thenprint_log "$FUNCNAME():服务器端口不能为空"exitfiprint_log "$FUNCNAME():开始检测-[$1:$2]服务器的网站超时时间."httptime=`curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer:%{time_starttransfer}\ntime_total: %{time_total}\n" "http://$1:$2/verdict/session/LSGJA52U7CH055974/latest/result" |grep time_total|awk -F ":" '{print $2*1000}'`taketime=$(expr $httptime / 1000)if [[ $httptime -gt 60000 ]];thenprint_log "$FUNCNAME():[$1:$2]服务器的网站响应时间不正常,开始重启应用--$httptime ms."print_log "$FUNCNAME():执行命令: $exec_stop"derestart "$key" "$exec_stop"num2=$(cat /tmp/restart.num)if [[ $num2 -ne 0 ]];thenprint_log "$FUNCNAME():停应用失败."fiprint_log "$FUNCNAME():执行命令: $exec_start"sleep 3derestart "$key" "$exec_start"num2=$(cat /tmp/restart.num)if [[ $num2 -eq 0 ]];thenprint_log "$FUNCNAME():启动应用失败."fiprint_log "$FUNCNAME():重启应用成功."elseprint_log "$FUNCNAME():[$1:$2]服务器的网站响应时间正常--$httptime ms/$taketime s."fi}check_code "localhost" "6500"check_timeout "localhost" "6500" 坚持原创技术分享,您的支持将鼓励我继续创作! 赏 微信打赏