|
前言
由于平时项目较多,每天要查看的服务进程比较多,后来就想通过python定时轮询端口,查看服务进程是不是还在,然后通过邮件发送出来,这样减少工作量。实现的方式是linux服务器(linux自带python)通过socket的模块判断端口连接是否被占用,最后通过smtplib模块及email.mime.text模块完成邮件发送。
引入的相关模块:
import socket
import smtplib
from email.mime.text import MIMEText
通过socket完成端口的查询
#判断端口是否占用
def is_open(ip,port):
s= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((ip,int(port)))
#可以连接,然后关闭连接
s.shutdown(2)
return True
except:
return False
轮询多台服务器的ip端口情况
def is_service_on(hosts,ports):
result=''
for port in ports:
if is_open(hosts, port):
result=result+hosts+':'+port+' is exit'+'<br />'
else:
result=hosts+':'+port+' is not exit'+'<br />'+result
return result
通过smtplib模块及email.mime.text模块完成邮件发送
#邮件发送
def send_msg(result,topic):
#送发方的邮箱
msg_from=".......@qq.com"
#密码,不是邮件的密码,要在自己的邮件里设置
pwd="........"
#接收方的邮箱
to=".....@....com"
#邮件的题目
subject="服务端口情况"
#邮件的内容
content="<h1>"+"服务的端口情况如下:"+"<br />"+result+"</h1>"
#构造邮件,按html的方式输出
msg=MIMEText(content,"html","utf-8")
msg["Subject"]=subject
msg["From"]=msg_from
msg["To"]=to
#发送邮件
try:
ss=smtplib.SMTP_SSL("smtp.qq.com",465)
ss.login(msg_from,pwd)
ss.sendmail(msg_from,to,msg.as_string())
ss.quit()
print ('send suessfully')
return True
except smtplib.SMTPException as e:
print (e)
return False
最后通过主函数串连某个程序
if __name__ == '__main__':
#第一台服务器的ip及端口
host_2 = '127.0.0.1'
port_2 = ['3306','28688' ]
#第二台服务器的ip及端口
host_3 = '127.0.0.1'
port_3 = ['3306','1521','8385','8088','28688','8161','4366','8081']
#第三台服务器的ip及端口
host_5 = '127.0.0.1'
port_5 = ['8385','8099','8388','8080']
#
result=''
topic=''
result=result+is_service_on(host_2,port_2)
result=result+is_service_on(host_3,port_3)
result=result+is_service_on(host_5,port_5)
if (result.find("not") != -1):
topic="存在问题"
else:
topic="正常"
send_msg (result,topic)
源码下载地址http://download.csdn.net/download/shirenkan/11992399,也包括内存查寻部分 |