xiaowei8782088 发表于 2015-12-1 10:01:30

PYTHON--定期监测服务器端口,并将结果写入MYSQL

  定时监测服务器端口,然后将结果入写数据库。
  监测用NC命令,入库就用PYTHON的MYSQL模块
  再调一个基于函数的多线程。。。
  妥妥的。。
  是网上两个功能的合成。。
  
  俺不生产代码,俺只是BAIDU的搬运工!
  



#!/usr/bin/env python
import multiprocessing
import subprocess
import MySQLdb
host_list = []
for line in open("/xxx/data_ip_port"):
host_list.append(line.strip('\n'))
if len(host_list) > 10:
process_number = 10
else:
process_number = len(host_list)
def insert_mysql(sql_str):
try:
conn=MySQLdb.connect(host='xxxx',user='xxxx',passwd=xxxxxxx',db='xxxx',port=xxxx)
cur=conn.cursor()
cur.execute(sql_str)
cur.close()
conn.commit()
conn.close()
except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args, e.args)

def ping_host(ipaddr):
if subprocess.call('nc -vz -w 2 %s > /dev/null' % ipaddr, shell=True) == 0:
print '%s is OK' % ipaddr
ip = ipaddr.split()
port = int(ipaddr.split())
sqlstr = "INSERT INTO monitor_crawler (ip,port,status) VALUES ('%s',%d,0)" % (ip, port)
insert_mysql(sqlstr)
else:
print '%s is DOWN' % ipaddr
ip = ipaddr.split()
port = int(ipaddr.split())
sqlstr = "INSERT INTO monitor_crawler (ip,port,status) VALUES ('%s',%d,1)" % (ip, port)
insert_mysql(sqlstr)
pool = multiprocessing.Pool(processes=process_number)
for ip in host_list:
pool.apply_async(ping_host,(ip,))
pool.close()
pool.join()
  
页: [1]
查看完整版本: PYTHON--定期监测服务器端口,并将结果写入MYSQL