多线程批量ping服务器
最近由于工作的需要寫(xiě)了個(gè)多線程批量ping服務(wù)器的腳本,如果服務(wù)器down了,自動(dòng)發(fā)報(bào)警郵件(可以添加多收件人)
?
提示:程序網(wǎng)頁(yè)顯示可以能有縮進(jìn)問(wèn)題。
multithreading_ping_host.py?主程序使用需要一個(gè)參數(shù),(參數(shù):服務(wù)器IP地址列表)
send_mail.py?發(fā)郵件程序
ip.yml?服務(wù)器IP地址列表
[root@nginx1?python]#?cat?/root/python/ip.yml?
192.168.1.1
192.168.1.103
192.168.1.100
www.360kad.com
192.168.1.245
[root@nginx1?python]#?./multithreading_ping_host.py?/root/python/ip.yml?
程序效果:
[root@nginx1?python]#?cat?multithreading_ping_host.py?
#!/usr/bin/python
#?-*-?coding:?gbk?-*-
import?multiprocessing
import?os,sys
import?time
filename=sys.argv[1]
if?filename?==?'':
????sys.exit(0)
result=[]
excution_list=[]
def?ip_address(iplist):
????????hosts=[]
????????IP=[]
????????if?os.path.exists(filename):
????????????????f=file(filename)
????????????????for?line?in?f.readlines():
????????????????????????f_line?=line.strip().split()
????????????????????????hosts.append(f_line)
????????????????for?i?in?range(int(len(hosts))):
????????????????????????IP.append(hosts[i][0])
????????????????return?IP
????????else:
????????????????print?"\033[31mfile:-->%s?not?found\033[0m"?%?(filename)
????????????????sys.exit(1)
hosts=ip_address(filename)
?
for?line?in?hosts:
????????cmd="ping?-c?2?%s?>?/dev/null"?%?line
????????excution_list.append(cmd)
def?run_cmd(cmd):
?????????if?os.system(cmd)?==?0:
?????????????????ip=cmd.split()
?????????????????HOST=ip[3]
?????????????????print??"%s?is:"?%?(HOST)?+?"\033[32m?UP\033[0m"
???????else:
?????????????????ip=cmd.split()
?????????????????HOST=ip[3]
?????????????????print??"%s?is:"?%?(HOST)?+?"\033[31m?DOWN\033[0m"
?????????????????SEN=HOST+':down'
?????????????????os.system('/root/python/send_mail.py?'+SEN?+'?'+?HOST+':服務(wù)器down機(jī)了')
?????????????????#如果服務(wù)器down了調(diào)用send_mail.py發(fā)報(bào)警郵件
def?main():
?????????work=multiprocessing.Pool(processes=len(excution_list))
?????????for?task?in?excution_list:
?????????????????result.append(work.apply_async(run_cmd,(task,)))
?????????work.close()
?
?????????for?print_result?in?result:
?????????????????print_result.get()
?
if?__name__?==?'__main__':
?main()
?
[root@nginx1?python]#?cat?send_mail.py?
#!/usr/bin/env?python
#?-*-?coding:?utf8?-*-
import?sys
import?smtplib
from?email.mime.text?import?MIMEText
mailto_list=["624042419@qq.com"]?#可定義多個(gè)收件人以頭號(hào)隔開(kāi)。
mail_host="mail.sina.com"
mail_user="*********"
mail_pass="*********"
mail_postfix="sina.com"
SEN=sys.argv[1]
CON=sys.argv[2]
if?SEN?==?'??'?and?CON?==?'??':
????????sys.exit(0)
def?send_mail(to_list,sub,content):
????????????me=mail_user+"<"+mail_user+"@"+mail_postfix+">"
????????????msg?=?MIMEText(content)
????????????msg['Subject']?=?sub
????????????msg['From']?=?me
????????????msg['To']?=?";".join(to_list)
????????????try:
????????????????????s?=?smtplib.SMTP()
????????????????????s.connect(mail_host)
????????????????????s.login(mail_user,mail_pass)
????????????????????s.sendmail(me,?to_list,?msg.as_string())
????????????????????s.close()
????????????????????return?True
????????????except?Exception,?e:
????????????????????print?str(e)
????????????????????return?False
if?__name__?==?'__main__':
????????if?send_mail(mailto_list,SEN,CON):
????????????????print?"\033[32m郵件通知成功..\033[0m"
????????else:
????????????????print?"\033[31m郵件通知失敗..\033[0m"
?
---------------------------------------------------------------------------------------------
?
?
?
?
?
?
轉(zhuǎn)載于:https://blog.51cto.com/xieqn/1258926
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的多线程批量ping服务器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C#中的控制结构
- 下一篇: tomcat源码之架构解析