标签:主机不可达 subprocess queue zabbix trapper
1、Python脚本获取不可达服务器的IP:通过简单的ping命令判断主机是否可达。脚本基于Python3.3.6,Python2.x版本的queue模块应该是Queue。
#!/usr/bin/python
#-*- coding: utf-8 -*-
from __future__ import print_function
import re
import subprocess
import threading
from queue import Queue
from queue import Empty
def is_reachable(ip):
'''根据ping命令的返回值,判断IP是否可以ping通。如果返回值不是0,说明不通,输出该IP'''
if subprocess.getstatusoutput('ping -c 1 {0}'.format(ip))[0] != 0:
print(ip,end=',')
def unreachable_ip(ip_queue):
'''不用等待,从IP队列中取出IP,调用is_reachable函数,直到队列中的内容为空'''
try:
while True:
ip = ip_queue.get_nowait()
is_reachable(ip)
except Empty:
pass
def get_unreachable_ip(filename, ip_queue, threads):
'''从iplist文件中获取IP,加入到队列中。创建5个线程调用unreachable_ip函数'''
with open(filename, 'rt') as fin:
for line in fin:
if line and not re.match('#', line):
ip_queue.put(line.split('\n')[0])
for i in range(5):
thr = threading.Thread(target=unreachable_ip, args=(ip_queue,))
thr.start()
threads.append(thr)
for thr in threads:
thr.join()
if __name__ == '__main__':
filename = '/etc/zabbix/scripts/iplist.txt'
ip_queue = Queue()
threads = []
get_unreachable_ip(filename, ip_queue, threads)标签:主机不可达 subprocess queue zabbix trapper
原文地址:http://blog.51cto.com/13568014/2117012