一、首先下载sendEmail客户端(sendEmail是一个轻量级,命令行的SMTP邮件客户端。如果你需要使用命令行发送邮件,那么sendEmail是非常完美的选择:使用简单并且功能强大.这个被设计用在php、bash、perl和web站点使用。)
# wget http://soft.ileiming.com/sendEmail-v1.56.tar.gz
解压并更改存放路径(sendEmail直接解压就可以使用,不需要编译)
# tar -zxvf sendEmail-v1.56.tar.gz
# mv sendEmail-v1.56 /usr/local/sendEmail
二、监控脚本
#!/bin/bash
for url in $(cat /data/static/urllist)
do
s=`curl -I -m 10 -o /dev/null -s -w %{http_code} $url`
if [ "$s" -eq "200" ]
then
echo $url service is OK.
else
/usr/local/sendEmail/sendEmail -f "Box address" -t "Inbox address" -cc "A copy of the email address" -u "$url service was down" -m "$url service was down at `date +%Y%m%d%H%M`" -s smtp.163.com -xu emailname -xp emailpassword
echo $url >> /data/static/downlist
sed -i '/'"$url"'/d' /data/static/urllist
fi
done
for url in $(cat /data/static/downlist)
do
s=`curl -I -m 10 -o /dev/null -s -w %{http_code} $url`
if [ "$s" -eq "200" ]
then
/usr/local/sendEmail/sendEmail -f "Box address" -t "Inbox address" -cc "A copy of the email address" -u "$url Service is restored to normal" -m "$url Service is restored to normal at `date +%Y%m%d%H%M`" -s smtp.163.com -xu emailname -xp emailpassword
echo $url >> /data/static/urllist
sed -i '/'"$url"'/d' /data/static/downlist
else
echo $url The service is still down.
fi
done
此脚本直接拿去是无法使用的,因为里面还有一些配置参数需要修改,当然如果为了方便,也可以把这些配置参数做成变量复制的形式,之后就只需要调用变量就OK。
“Box address”(替换成发件箱地址)
“Inbox address” (替换成收件箱地址)
“A copy of the email address” (替换成抄送邮件地址)
emailname (替换成邮箱登陆用户名)
emailpassword (替换成邮箱登陆密码)
此脚本分两部分,前面部分是抓去/data/static/urllist文件里面的域名(考虑到会监测多个域名,我们只需要把需要监测的域名填写到urllist里面即可),脚本会监测域名列表里的域名的状态吗,如果是200,直接忽略,如果是非200状态,会发邮件报警,并把域名转储到/data/static/downlist文件里,并删除urllist里该域名的记录。第二部分是监控/data/static/downlist文件,如果所有监控的域名都正常,这个文件应该是空的,我们不需要去管这个文件,如果有访问不正常的域名,shell脚本会把不正常的域名转储到此文件,如果该域名已经恢复正常,shell也同样把把域名从该文件剔除,并转储到/data/static/urllist文件中。
转载请注明:IT运维空间 » linux » 通过shell脚本监控网站状态并邮件报警
发表评论