|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
小知识:CentOS商业化干掉红帽才是出路?
比来公司做数据库的单台办事器多实例,须要对各个数据库的过程停止监控,由于我们的资产数据库中曾经有这个办事器跑若干个实例,端口是甚么,用来做甚么的,所以就拿资产数据库的端口和办事器当地运转的数据库端口停止比较,报出没有运转的mysql实例和他的用处。一种办法是依据"psauxww|grepmysqld|grep-vroot|grep-vgrep"这个敕令抓取当地运转的数据库端口,不外你也能够依据netstat敕令来获得当地数据库实例的一切端口;还有一种办法就是从资产中获得这个办事器应当运转的一切mysql端口,用python的socket模块来检测端口能否存活,这类办法比拟简略一些。我用第一种办法是由于我的这段代码我曾经写过用于其他用处,等于复用,图个省事。以下是代码内容:
- #!/bin/envpython#-*-coding:utf-8-*-importos,sys,MySQLdbdefcenter(sql):#衔接数据库try:center_ip=192.168.1.100center_user=rootcenter_passwd=xxxxxxconn=MySQLdb.connect(host=center_ip,user=center_user,passwd=center_passwd,charset=utf8,connect_timeout=20)cursor=conn.cursor()cursor.execute(sql)alldata=cursor.fetchall()cursor.close()conn.close()returnalldataexcept:return0classcheck_port():#走资产中获得当地IP中应当有若干个mysql实例端口def__init__(self):conn="ipa|grepglob|grep-v192.168|awk{print$2}"self.host=os.popen(conn).readlines()[0].split("/")[0]defremot(self):sql="SELECTPORTFROMcenter.host_infoWHEREflag=1ANDdel_info!=0ANDip=%sANDhost_nameIN(a,b,c)"%self.hostalldata=center(sql)cent_port=[]ifalldata!=0:foriinalldata:cent_port.append(str(i[0]))returncent_portelse:returncent_portdeflocal(self):#获得当地mysql有若干个实例运转psinfo=os.popen("psauxww|grepmysqld|grep-vroot|grep-vgrep").readlines()local_port=[]ifnotpsinfo:returnlocal_portforiinpsinfo:forjini.split("--"):ifj.find("port")!=-1:port=j.split("=")[1].strip()local_port.append(port)returnlocal_portdefmain(self):local_port=self.local()cent_port=self.remot()cent_port.sort()local_port.sort()iflocal_port==cent_portandlen(local_port)!=0andlen(cent_port)!=0:print0else:error=""diff_list=list(set(local_port)^set(cent_port))forportindiff_list:sql="SELECTCONCAT(a.main_name,_,b.sub_name,_,c.app_name,_,c.port)ASusedFROMcenter_app.main_categorya,center_app.sub_categoryb,center_app.app_infocWHEREa.id=b.main_idANDb.dist_id=c.dist_idANDb.main_id=c.main_idANDb.main_id=2ANDc.flag=1ANDc.del_info!=0ANDc.ip=%sandc.port=%s"%(self.host,port)alldata=center(sql)iferror=="":error=error+alldata[0][0]else:error=error+";"+alldata[0][0]printerrorif__name__=="__main__":boss=check_port()boss.main()
复制代码
假如用第二种办法的话,很简略,用上面的函数可以完成这个端口测试:
- ipmortsocketdeftest_port()s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.settimeout(2)address=127.0.0.1port=80try:s.connect((address,port))returnTrueexceptException,e:returnFalses.close()
复制代码
小知识:如果说Ubuntu是现今最受桌面用户欢迎的Linux操作系统,那么CentOS就是最受公司、企业、IDC喜爱的Linux发行版了。 |
|