【思路】
通过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
...