评论

评论

这篇文章还没有任何评论。快来成为第一个评论者吧!

Python监控服务器是否宕机并发邮件提醒

【思路】

通过python socket的server.connect()方法,实现 服务器+端口的方式检测服务器是否宕机(包括Win和Linux)

【注意事项】

发件人邮箱得开通POP3/SMTP服务(推荐Gmail)

【代码如下】

# encoding: utf-8
import socket
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import time
import io

def get_ip_status(ip,port):
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    try:
        server.connect((ip,port))
        return True
    except Exception as e:
        return False
    finally:
        server.close()

def send_mail(content):
    mail_host="smtp.gmail.com"
    mail_user="sender@gmail.com"
    mail_pass="sender_passwd"
    sub = time.strftime("%Y-%m-%d", time.localtime())

    me = 'ZuiSeng'
    msg = MIMEText(content, _subtype='plain')
    msg['Subject'] = sub + '服务器宕机日常检测'
    msg['From'] = Header("标题", 'utf-8')
    msg['To'] = Header("发件人", 'utf-8')
    mail_res=["receiver@163.com", "receiver@qq.com","receiver@gmail.com"]
    s = smtplib.SMTP(mail_host,25)
    s.starttls()
    s.login(mail_user, mail_pass)
    s.sendmail(me, mail_res, msg.as_string())
    s.close()

def main():
    message = ""
    with open("/root/ip_port.txt", "r") as f:
        for line in f.readlines():
            line = line.strip('\n')
            ip = line.split(':')[0]
            port = int(line.split(':')[1])
            if(get_ip_status(ip,port)):
                pass
            else:
                print("服务器 {} 可能宕机了 ".format(ip))
                message += "\n服务器 {} 可能宕机了 ".format(ip)
    if(len(message)>4):
        send_mail(message)
    else:
        send_mail("一切正常,请放心")

if __name__ == '__main__':
    main()
#ip_port.txt内容
IP1:端口1
IP2:端口2
...
3
分享本页
微信扫一扫浏览本页

我们注意到您的浏览器版本过低。本站需要在更现代的浏览器上才能充分展现,我们推荐您下载谷歌Chrome浏览器来浏览本站。

下载谷歌浏览器