shell脚本监控网站状态
给大家发个不错的网站监控shell,当然说它功能强大也不是很强大,但配置上很灵活,因为此脚本的作用是按固定频率不停访问给出的URL,当网站不可访问时自动给设定邮箱发送告警邮件以通知用户.好了.来看脚本吧.
使用Linux自带的curl工具访问给出网址,并返回http_code,当http_code不等于200时即可认为网站存在访问故障,但考虑到实际的不稳定因素,当第一次返回http_code不等200时,脚本休眠10秒钟,然后继续访问,累计连续不可访问次数达到5次后触发告警邮件.
可配置字段,脚本第二段中有如下三个可配置字段:
EMAIL:接收告警信息的email地址.
LOG_FILE:日志文件,建议使用绝对路径;最后的web_status_`date ‘+%Y%m’`.log代表以月为单位分割日志,如web_status_201105.log
TMP_EMAIL:临时邮件文件,同样建议使用绝对路径,保持所在目录有写权限即可.
使用方法:
脚本后面需跟两个参数:第一个参数为监控网站的URL,第二个参数为延时时间(可选,以秒为单位,建议在对多个网站进行监控时添加),将此脚本添加到操作系统的crontab里面,按需求设定运行频率,建议2分钟一次.若有多个网站需监控,在crontab里面添加多行即可,每个URL一行,如下为同时对三个网站进行监控:
*/2 * * * * sh /var/monitor/web_monitor.sh https://blog.slogra.com
*/2 * * * * sh /var/monitor/web_monitor.sh https://blog.slogra.com 5
*/2 * * * * sh /var/monitor/web_monitor.sh https://blog.slogra.com 10
使用此脚本前请确保系统的邮件服务可行,在Github上查看源代码:
https://github.com/bostoneboy/shell-scripts/blob/master/web-monitor.sh
#!/bin/sh # */2 * * * * sh /var/monitor/web_monitor.sh http:///blog.slogra.com # */2 * * * * sh /var/monitor/web_monitor.sh http:///blog.slogra.com 5 # */2 * * * * sh /var/monitor/web_monitor.sh http:///blog.slogra.com 10 export LANG=C URL="$1" EMAIL="rocdk890@gmail.com" # change for your mail address. LOG_FILE="/var/log/monitor/web_status_`date '+%Y%m'`.log" TMP_EMAIL="/var/monitor/.tmp.mail.`date '+%s'`" if [ $2 ] then sleep $2 fi # Define function "ECHO", append the timestamp at the head of every echo display. ECHO () { printf "%s " `date '+%Y-%m-%d %H:%M:%S'` echo $1 } # Define function HTTP_CODE, obtain the status of web service. HTTP_CODE () { http_code=`curl -m 10 -o /dev/null -s -w %{http_code} $URL` } # Define function MAIL. MAIL () { echo "$URL is not available now, pls pay attention." > $TMP_EMAIL echo "And the Server 's time is: " >> $TMP_EMAIL date >> $TMP_EMAIL echo >> $TMP_EMAIL echo "------" >> $TMP_EMAIL echo "BR" >> $TMP_EMAIL echo "Shell Robot." >> $TMP_EMAIL mail -s "Server Alert: $URL" $EMAIL < $TMP_EMAIL rm $TMP_EMAIL } n=0 HTTP_CODE if [ $http_code -eq 200 ] then ECHO "|http_code:200|+$n|webpage visit success.|$URL" >> $LOG_FILE else while [ $http_code -ne 200 ] do n=`expr $n + 1 ` ECHO "|http_code:$http_code|+$n|webpage visit failed. |$URL" >> $LOG_FILE if [ $n -eq 5 ]; then MAIL $1; exit 0 fi sleep 10 HTTP_CODE done fi # End.
使用Linux自带的curl工具访问给出网址,并返回http_code,当http_code不等于200时即可认为网站存在访问故障,但考虑到实际的不稳定因素,当第一次返回http_code不等200时,脚本休眠10秒钟,然后继续访问,累计连续不可访问次数达到5次后触发告警邮件.
可配置字段,脚本第二段中有如下三个可配置字段:
EMAIL:接收告警信息的email地址.
LOG_FILE:日志文件,建议使用绝对路径;最后的web_status_`date ‘+%Y%m’`.log代表以月为单位分割日志,如web_status_201105.log
TMP_EMAIL:临时邮件文件,同样建议使用绝对路径,保持所在目录有写权限即可.
使用方法:
脚本后面需跟两个参数:第一个参数为监控网站的URL,第二个参数为延时时间(可选,以秒为单位,建议在对多个网站进行监控时添加),将此脚本添加到操作系统的crontab里面,按需求设定运行频率,建议2分钟一次.若有多个网站需监控,在crontab里面添加多行即可,每个URL一行,如下为同时对三个网站进行监控:
*/2 * * * * sh /var/monitor/web_monitor.sh https://blog.slogra.com
*/2 * * * * sh /var/monitor/web_monitor.sh https://blog.slogra.com 5
*/2 * * * * sh /var/monitor/web_monitor.sh https://blog.slogra.com 10
使用此脚本前请确保系统的邮件服务可行,在Github上查看源代码:
https://github.com/bostoneboy/shell-scripts/blob/master/web-monitor.sh
评论: