编程需求:
在项目有web服务器的时候,监控服务器的状态是非常重要的一项任务,虽然可以通过手动执行命令来进行检测,但是显然非常的耗费时间和人力;因此采用脚本+周期性计划任务的形式显得更加的合理化!
使用curl命令对网站进行监控时,可以根据HTTP服务端返回的状态码,判断一台Web服务器状态是否正常!当出现错误的时候,应该还能够自动实现报警功能!!!
源代码:
#!/bin/bash
#功能描述:使用curl访问具体的HTTP页面,检测HTTP状态码
#CURL选项说明
#-m 设置超时时间;
#-s 设置静默时间;
#-o 下载数据另存为;
#-w 返回附加信息,http状态码;
#http服务器IP地址
url=web服务器IP地址/index.html对应页面的html文件
如:127.0.0.1/index.html
#日期
date=$(date +"%Y-%m-%d %H:%M:%S")
#HTTP状态码
status_code=$(curl -m 3 -s -o /dev/null -w %{http_code} $url)
#邮件报警
mail_to="root@localhost"
mail_subject="http_warning"
#如果状态码不等于200,即判定为http服务出现异常
if [ $status_code -ne 200 ];then
mail -s $mail_subject $mail_to <<- EOF
检测时间为:$date
$url 页面异常,服务器返回状态码:${status_code}
请尽快检查
EOF
else
cat >> /var/log/http_check.log <<- EOF
$date "$url 页面正常"
EOF
fi
脚本运行结果
当状态错误时,这里是没有启动http服务时:
/root/check_http_curl.sh
您在 /var/spool/mail/root 中有邮件
#进入邮件系统查看
mail -u root
N 36 root Sat Nov 23 14:25 20/705 "http_warning"
邮件信息如下:
检测时间为:2019-11-23 14:25:41
http://127.0.0.1/index.html 页面异常,服务器返回状态码:404
请尽快检查
正常状态下
/root/check_http_curl.sh
cat /var/log/http_check.log
检测时间为:2019-11-23 14:46:30
"http://127.0.0.1/index.html 页面访问正常"
在/var/log/httpd_check.log文件内就会记录查询时间,状态正常的消息
Shell+crontab周期性计划任务
与周期性计划任务连用,实现自动运行脚本自动检测HTTP服务状态.
1.给脚本赋予执行权限,不然无法启动脚本
chmod +x check_http_curl.sh
2.添加周期性计划任务
crontab -e -u root
*/1 * * * * /root/check_http_curl.sh
具体频率应该根据实际情况设置,这里为了方便观察,写的是每分钟都运行一次!
检测时间为:2019-11-23 14:53:01
"http://127.0.0.1/index.html 页面访问正常"
检测时间为:2019-11-23 14:54:01
"http://127.0.0.1/index.html 页面访问正常"