腳本功能:html
監控多臺Web服務器狀態,一旦發生問題就發送郵件python
#!/usr/bin/env python # coding=utf-8 #---------------------------------------------------------- # Name: WEB服務器巡檢腳本 # Purpose: 監控多臺Web服務器狀態,一旦出現問題就發送郵件 # Version: 1.0 # Author: LEO # BLOG: http://linux5588.blog.51cto.com # EMAIL: chanyipiaomiao@163.com # Created: 2013-06-04 # Copyright: (c) LEO 2013 # Python: 2.4/2.7 #---------------------------------------------------------- from smtplib import SMTP from email import MIMEText from email import Header from datetime import datetime import httplib #定義要檢測的服務器,URL 端口號 資源名稱 web_servers = [('192.168.1.254', 80, 'index.html'), ('www.xxx.com', 80, 'index.html'), ('114.114.114.114', 9000, '/main/login.html'), ] #定義主機 賬號 密碼 收件人 郵件主題 smtpserver = 'smtp.163.com' sender = 'xxxx@xxx.com' password = 'password' receiver = ('收件人1','收件人2') subject = u'WEB服務器告警郵件' From = u'Web服務器' To = u'服務器管理員' #定義日誌文件位置 error_log = '/tmp/web_server_status.txt' def send_mail(context): '''發送郵件''' #定義郵件的頭部信息 header = Header.Header msg = MIMEText.MIMEText(context,'plain','utf-8') msg['From'] = header(From) msg['To'] = header(To) msg['Subject'] = header(subject + '\n') #鏈接SMTP服務器,而後發送信息 smtp = SMTP(smtpserver) smtp.login(sender, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.close() def get_now_date_time(): '''獲取當前的日期''' now = datetime.now() return str(now.year) + "-" + str(now.month) + "-" \ + str(now.day) + " " + str(now.hour) + ":" \ + str(now.minute) + ":" + str(now.second) def check_webserver(host, port, resource): '''檢測WEB服務器狀態''' if not resource.startswith('/'): resource = '/' + resource try: try : connection = httplib.HTTPConnection(host, port) connection.request('GET', resource) response = connection.getresponse() status = response.status content_length = response.length except : return False finally : connection.close() if status in [200,301] and content_length != 0: return True else: return False if __name__ == '__main__': logfile = open(error_log,'a') problem_server_list = [] for host in web_servers: host_url = host[0] check = check_webserver(host_url, host[1], host[2]) if not check: temp_string = 'The Server [%s] may appear problem at %s\n' % (host_url,get_now_date_time()) print >> logfile, temp_string problem_server_list.append(temp_string) logfile.close() #若是problem_server_list不爲空,就說明服務器有問題,那就發送郵件 if problem_server_list: send_mail(''.join(problem_server_list))