您的位置:首页 > 运维架构 > Shell

Python&Shell 简易实现监控公司网站,邮件发送异常

2017-05-26 16:58 1426 查看

背景

由于一些原因,博主负责测试的网站的服务器切换到了香港,切换后出现了多次访问超时的情况

于是主动请缨写一个自动监测的脚本,本来准备完全使用shell来写,后来发现shell邮件只能在linux之间进行。所以添加了增加了一个Python文件来完成该功能。

思路

使用Linux系统自带的定时模块crontab,设置每隔五分钟调用一次检查脚本,如果发现异常,调用Python脚本发送邮件

邮件[b]4小时只会发送一次,如果执行了发送邮件的代码,就使用sed命令将该行代码置为无效[/b]


邮件接受人和需要监控的url都放在配置文件中,方便后续扩展。

使用crontab的好处是,只要系统在运行,脚本就能正常运行。


请求脚本

#! /bin/bash
#把所有标准输出重定向到到日志文件中
exec 1>>/home/XXX/Monitor/cfg.log
#获取配置文件中的url
urls=`cat /home/XXX/Monitor/url.inc|grep -v '#'`
for i in ${urls}
do
#获取页面返回码
result=`curl -I -m 10 -o /dev/null -s -w %{http_code} ${i}`

#日志内容(标准输出)
date;echo ${result};echo $i ;echo '-----------------------------'

#判断数据是否异常,如果异常就调用发送邮件的脚本,
#只发送一次邮件,如果执行了发送邮件的代码,就将该段代码置为无效
[ "$result" = 200 ]  && `python /home/XXX/Monitor/mail_sender.py $i ${result}` && `sed -i 's/\&\&/\#\#/' /home/XXX/Monitor/request.sh`
done


Python邮件发送脚本

#! /usr/bin/python
# coding:utf-8
import smtplib,sys
from email.mime.text import MIMEText
from email.header import Header
sender = 'Bingo<XXXXXXXX@163.com>'
#主题
subject = 'XXX出现异常,页面访问不正常'
#指定163邮箱服务器,用户名、密码
smtpserver = 'smtp.163.com'
username = 'XXXXXXXX@163.com'
passwd = 'XXXXXX'
#将传入参数存到变量details中
details = sys.argv[1] + ' 异常----'+' 异常响应码 : ' + sys.argv[2]
#获取收件人信息
emails = open('/home/test/Monitor/email_add.inc','r')
data = emails.readlines()
receiver = data[1:]
#定义发件人、收件人、主题、邮件内容等信息
msg = MIMEText(details,'plain','utf-8')
msg['subject'] = Header(subject,'utf-8')
msg['From'] = 'BINGO<XXXXXXXX@163.com>'
msg['To'] = ",".join(data[1:])
#链接服务器、发送邮件
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(username,passwd)
smtp.sendmail(sender,receiver,msg.as_string())
smtp.close()


定时任务设置

crontab -e 打开定时任务编辑器,添加下面两行

*/5    *       *         *     *  bash /home/brenda/CFG_Monitor/request.sh  >> /home/brenda/CFG_Monitor/cfg.log
*      */4       *         *     *  bash /home/brenda/CFG_Monitor/recover.sh  >> /home/brenda/CFG_Monitor/cfg.log


恢复邮件发送能力脚本

#! /bin/bash
sed -i '/\[/{s/\#\#/\&\&/g}' /home/XXX/Monitor/request.sh
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: