[v_blue]脚本使用mutt命令发送邮件,可以替换为mail,使用方法//www.sevenfal.com/2017/11/29/1019.html[/v_blue]
#!/bin/bash ly_ver=1.0.3 date1="2017-12-04 14:06" #curl 检测超时(秒) curl_timeout=5 #检测出现 3 次状态码不正常后邮件报警 mail_do=3 #故障未恢复再次告警时间(8小时以后) let check_check=60*8 path1=/usr/local/monitor if [ ! -x /usr/bin/monitor ];then cp $0 /usr/bin/monitor chmod +x /usr/bin/monitor fi if $(crontab -l |grep -q '^\* \* \* \* \* sh /usr/local/monitor/crontab_do$') ;then cd . else (crontab -l 2>/dev/null;echo '* * * * * sh /usr/local/monitor/crontab_do') |crontab - fi function url_add(){ echo "请输入需要添加监控的网址(eg. http://baidu.com/):" read check_url read -p "请输入网址正常的状态码(eg. 200):" check_code until echo ${check_code} |grep -q "^[[:digit:]]\+$" ;do read -p "请输入网址正常的状态码(eg. 200):" check_code done echo "${check_code} ${check_url} 0" >> ${path1}/url_list.txt } function url_list(){ cat -n ${path1}/url_list.txt } function url_del(){ url_list read -p "请输入需要删除的行号(eg. 2):" del_line until echo ${del_line} |grep -q "^[[:digit:]]\+$" ;do read -p "请输入需要删除的行号(eg. 2):" del_line done sed -i "${del_line}d" ${path1}/url_list.txt url_list } function mail_add(){ echo "请输入需要通知的邮箱地址(eg. [email protected]):" read mail_name echo "${mail_name}" >> ${path1}/mail_list.txt } function mail_list(){ cat -n ${path1}/mail_list.txt } function mail_del(){ mail_list read -p "请输入需要删除的行号(eg. 2):" del_line until echo ${del_line} |grep -q "^[[:digit:]]\+$" ;do read -p "请输入需要删除的行号(eg. 2):" del_line done sed -i "${del_line}d" ${path1}/mail_list.txt mail_list } function monitor_check(){ mkdir -p ${path1} if [ ! -f ${path1}/url_list.txt ];then touch ${path1}/url_list.txt fi if [ ! -f ${path1}/mail_list.txt ];then touch ${path1}/mail_list.txt fi rm -rf ${path1}/crontab_do echo '#!/bin/bash' > ${path1}/crontab_do echo 'path1=/usr/local/monitor' >> ${path1}/crontab_do echo "curl_timeout=${curl_timeout}" >> ${path1}/crontab_do echo "check_check=${check_check}" >> ${path1}/crontab_do echo "mail_do=${mail_do}" >> ${path1}/crontab_do cat <<"EOF" >> ${path1}/crontab_do cat -n ${path1}/url_list.txt | while read val;do url_num=`echo $val|awk -F ' ' '{print $1}'` check_code=`echo $val|awk -F ' ' '{print $2}'` check_url=`echo $val|awk -F ' ' '{print $3}'` check_num=`echo $val|awk -F ' ' '{print $4}'` now_code=`curl -I -s --connect-timeout ${curl_timeout} -m ${curl_timeout} -o /dev/null -w %{http_code} ${check_url}` time1=`date "+%Y-%m-%d %H:%M:%S"` if [ ${now_code} != ${check_code} ] then let check_num=${check_num}+1 sed -i "${url_num} a${check_code} ${check_url} ${check_num}" ${path1}/url_list.txt sed -i "${url_num}d" ${path1}/url_list.txt if [[ ${check_num} = ${mail_do} || ${check_num} = ${check_check} ]] then for mail_name in `cat ${path1}/mail_list.txt`;do echo "故障时间:${time1} <br>故障链接:${check_url} <br>当前状态码:<span stytle${now_code}</span><br>目标状态码:${check_code}" | mutt -s "故障出现:${check_url} 状态码异常!" -e 'set content_type="text/html"' ${mail_name} done fi else sed -i "${url_num} a${check_code} ${check_url} 0" ${path1}/url_list.txt sed -i "${url_num}d" ${path1}/url_list.txt if (( ${check_num} > ${mail_do} )) then for mail_name in `cat ${path1}/mail_list.txt`;do echo "解除时间:${time1} <br>故障链接:${check_url} <br> 当前状态码:<span style='color:green'>${now_code} </span><br>目标状态码:${check_code}" | mutt -s "故障解除:${check_url} 状态码正常!" -e 'set content_type="text/html"' ${mail_name} done fi fi done EOF chmod +x ${path1}/crontab_do } echo "+-------------------------------------------+" echo "| Monitor for http code ${ly_ver} |" echo "+-------------------------------------------+" echo "| ${date1} |" echo "+-------------------------------------------+" arg1=$1 arg2=$2 monitor_check case ${arg1} in add) if [ "${arg2}" = "url" ];then url_add elif [ "${arg2}" = "mail" ];then mail_add else echo "Usage: monitor add {url|mail}" fi ;; list) if [ "${arg2}" = "url" ];then url_list elif [ "${arg2}" = "mail" ];then mail_list else echo "Usage: monitor list {url|mail}" fi ;; del) if [ "${arg2}" = "url" ];then url_del elif [ "${arg2}" = "mail" ];then mail_del else echo "Usage: monitor del {url|mail}" fi ;; *) echo "Usage: monitor {add|list|del} {url|mail}" ;; esac
© 著作权归作者所有
下一篇: ssl connect error
文章评论(0)