加速器后台程序,,[Python]代码#!
加速器后台程序,,[Python]代码#!
[Python]代码
#!/usr/bin/env py262import osimport sysimport refrom xml.dom import minidomfrom lxml import etreefrom StringIO import StringIOimport timefile_eth1 = '/etc/sysconfig/network-scripts/ifcfg-eth1'file_eth0 = '/etc/sysconfig/network-scripts/ifcfg-eth0'file_sysctl = '/etc/sysctl_test.conf'file_vd = '/etc/init.d/varnishd'file_vf = '/usr/local/varnish_214/etc/varnish_01.conf'filexml= '/speedy_data_transfers_server/speedy_data_transfers_server/WEB-INF/classes/config/config.xml'nw = {}eth = {}def daemonize (stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'): ''' Fork the current process as a daemon, redirecting standard file descriptors (by default, redirects them to /dev/null). ''' # Perform first fork. try: pid = os.fork( ) if pid > 0: sys.exit(0) # Exit first parent. except OSError, e: sys.stderr.write("fork #1 failed: (%d) %s\n" % (e.errno, e.strerror)) sys.exit(1) # Decouple from parent environment. os.chdir("/") os.umask(0) os.setsid( ) # Perform second fork. try: pid = os.fork( ) if pid > 0: sys.exit(0) # Exit second parent. except OSError, e: sys.stderr.write("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror)) sys.exit(1) # The process is now daemonized, redirect standard file descriptors. for f in sys.stdout, sys.stderr: f.flush( ) si = file(stdin, 'r') so = file(stdout, 'a+') se = file(stderr, 'a+', 0) os.dup2(si.fileno( ), sys.stdin.fileno( )) os.dup2(so.fileno( ), sys.stdout.fileno( )) os.dup2(se.fileno( ), sys.stderr.fileno( ))def parse_xml(fn,r_t,*tg): f_x = open(fn,'r') f_x.seek(0,0) tree = etree.parse(fn) root = tree.getroot() #print root #print type(root) NS = '{http://accelerator.com/config}' r_t_element = root.findall( NS + r_t) #print r_t_element #print type(r_t_element) if len(tg) >= 2: #if tg[-2] is None: #print tg[-2] s_t_element = tree.findall("//" + NS + tg[-2]) tg1_element = s_t_element[0].findall(NS + tg[-1]) b = [] for i in tg1_element: b.append(i.text) return b if len(tg) < 2: tg1_element = r_t_element[0].findall(NS + tg[-1]) b = [] for i in tg1_element: b.append(i.text) return bdef file_replace(filename,srcStr,dstStr): f = open(filename,'r') sc = f.read() stra = re.compile(srcStr) sub = re.sub(stra,dstStr,sc,0) f.close fok = open(filename,'w') fok.write(sub) fok.close()def file_replace_escap(filename,srcStr,dstStr): f = open(filename,'r') sc = f.read() stra0 = re.sub('\^','\\^',srcStr) stra1 = re.sub('\$','\\$',stra0) stra2 = re.sub('\(','\\(',stra1) stra3 = re.sub('\)','\\)',stra2) stra = re.compile(stra3) sub = re.sub(stra,dstStr,sc) f.close fok = open(filename,'w') fok.write(sub) fok.close()def fetch_conf(fn,conf): #conf maybe: IPADDR|NETMASK|NETWORK|GATEWAY #file_nw = file('/etc/sysconfig/network','r') #file_nw.seek(0,0) fn.seek(0,0) if conf == 'GATEWAY': #file_nw = file('/etc/sysconfig/network','r') for eachLine in fn: #alist = eachLine.strip().split('=') m1 = re.match('^#|^$',eachLine) if m1 is not None: continue else: m1 = re.search('=',eachLine) if m1 is not None: alist = eachLine.strip().split('=') nw[alist[0]]=alist[1] #print nw[conf] return nw[conf] else: #file_eth1_pu = file('/etc/sysconfig/network-scripts/ifcfg-eth0','r') for eachLine in fn: #alist = eachLine.strip().split('=') m1 = re.match('^#|^$',eachLine) if m1 is not None: continue else: m1 = re.search('=',eachLine) if m1 is not None: alist = eachLine.strip().split('=') eth[alist[0]]=alist[1] return eth[conf]def check_pn(): file_eth1_pu = open(file_eth1,'r') xml_ip = parse_xml(filexml,"network","public_setting","ip") xml_mk = parse_xml(filexml,"network","public_setting","mask") xml_gw = parse_xml(filexml,"network","public_setting","gateway") conf_ip = fetch_conf(file_eth1_pu,"IPADDR") conf_mk = fetch_conf(file_eth1_pu,"NETMASK") conf_gw = fetch_conf(file_eth1_pu,"GATEWAY") file_eth1_pu.close() '''check public ip''' if xml_ip[0] == conf_ip: print "ip is ok",xml_ip[0],conf_ip else: print "ip is wrong",xml_ip[0],conf_ip file_replace(file_eth1,conf_ip,xml_ip[0]) #os.system('''sudo sed -i 's|wrong|right|g' /etc/sysconfig/network-scripts/ifcfg-eth1''') '''check public netmask''' if xml_mk[0] == conf_mk: print "netmask is ok",xml_mk[0],conf_mk else: print "netmask is wrong",xml_mk[0],conf_mk file_replace(file_eth1,conf_mk,xml_mk[0]) '''check public gateway''' if xml_gw[0] == conf_gw: print "gateway is ok",xml_gw[0],conf_gw else: print "gateway is wrong",xml_gw[0],conf_gw file_replace(file_eth1,conf_gw,xml_gw[0])def check_in(): file_eth0_it = open(file_eth0,'r') xml_ip = parse_xml(filexml,"network","private_setting","ip") xml_mk = parse_xml(filexml,"network","private_setting","mask") xml_gw = parse_xml(filexml,"network","private_setting","gateway") conf_ip = fetch_conf(file_eth0_it,"IPADDR") conf_mk = fetch_conf(file_eth0_it,"NETMASK") conf_gw = fetch_conf(file_eth0_it,"GATEWAY") file_eth0_it.close() '''check internal ip''' if xml_ip[0] == conf_ip: print "ip is ok",xml_ip[0],conf_ip else: print "ip is wrong",xml_ip[0],conf_ip file_replace(file_eth0,conf_ip,xml_ip[0]) '''check internal netmask''' if xml_mk == conf_mk: print "netmask is ok",xml_mk[0],conf_mk else: print "netmask is wrong",xml_mk[0],conf_mk file_replace(file_eth0,conf_mk,xml_mk[0]) '''check internal gateway''' if xml_gw == conf_gw: print "gateway is ok",xml_gw[0],conf_gw else: print "gateway is wrong",xml_gw[0],conf_gw file_replace(file_eth0,conf_gw,xml_gw[0])def bu_cv(str): if str == "true": return str.replace('true','1') else: return str.replace('false','0')def bu_cv0(str): if str == '0': return str.replace('0','true') else: return str.replace('1','false')def check_sysctl_fs(): file_sysctl_fs = open(file_sysctl,'r') xml_fs_en = "tcp_fast.enable=" + bu_cv(str(parse_xml(filexml,"fasttcp","enable")[0])) xml_fs_p1 = "tcp_fast.noaccel_lport=" + parse_xml(filexml,"fasttcp","block_port","value")[0] xml_fs_p2 = "tcp_fast.noaccel_lport2=" + parse_xml(filexml,"fasttcp","block_port","value")[1] conf_fs_en = "tcp_fast.enable=" + fetch_conf(file_sysctl_fs,'tcp_fast.enable') conf_fs_p1 = "tcp_fast.noaccel_lport=" + fetch_conf(file_sysctl_fs,'tcp_fast.noaccel_lport') conf_fs_p2 = "tcp_fast.noaccel_lport2=" + fetch_conf(file_sysctl_fs,'tcp_fast.noaccel_lport2') file_sysctl_fs.close() if xml_fs_en == conf_fs_en: print "fastsoft enable toggle is ok" else: print "fastsoft enable toggle is bad" file_replace(file_sysctl,conf_fs_en,xml_fs_en) if xml_fs_p1 == conf_fs_p1: print "fastsoft p1 is ok" else: print "fastsoft p2 is bad" file_replace(file_sysctl,conf_fs_p1,xml_fs_p1) if xml_fs_p2 == conf_fs_p2: print "fastsoft p2 is ok" else: print "fastsoft p2 is bad" file_replace(file_sysctl,conf_fs_p2,xml_fs_p2)def check_cache(): file_vd_cf = open(file_vd,'r') xml_cache_mm = "VARNISH_STORAGE_SIZE=" + parse_xml(filexml,"cache","max_memeory")[0] + "M" xml_cache_en = str(parse_xml(filexml,"cache","enable")[0]) conf_cache_mm = "VARNISH_STORAGE_SIZE=" + fetch_conf(file_vd_cf,'VARNISH_STORAGE_SIZE') conf_cache_en = bu_cv0(str(os.system('ps aux | grep -v grep | grep -q varnishd'))) file_vd_cf.close() if xml_cache_mm[0] == conf_cache_mm: print "conf_cache_mm is ok" else: print "conf_cache_mm is bad" file_replace(file_vd,conf_cache_mm,xml_cache_mm[0]) if xml_cache_en[0] == conf_cache_en: print "conf_cache_en is ok" else: print "conf_cache_en is bad" if xml_cache_en == 'true': os.system('/sbin/service varnishd start') if xml_cache_en == 'false': os.system('/sbin/service varnishd stop')def gen_backend_str(): k = "" xml_varnish_origin = parse_xml(filexml,"varnish","origin","value") #print xml_varnish_origin[0].split('|')[0],xml_varnish_origin[0].split('|')[1],xml_varnish_origin[0].split('|')[2] ft_bk = "#origin_backend_start#" + "\n" + "backend " + xml_varnish_origin[0].split('|')[0] + " {\n" + "\t.host = \"" + xml_varnish_origin[0].split('|')[1] + "\";\n\t.port = \"" + xml_varnish_origin[0].split('|')[2] + "\";\n}\n" for i in xml_varnish_origin[1:-1]: #print i.split('|')[0],i.split('|')[1],i.split('|')[2] j = "backend " + i.split('|')[0] + " {\n" + "\t.host = \"" + i.split('|')[1] + "\";\n\t.port = \"" + i.split('|')[2] + "\";\n}\n" k += j #print xml_varnish_origin[-1].split('|')[0],xml_varnish_origin[-1].split('|')[1],xml_varnish_origin[-1].split('|')[2] lt_bk = "backend " + xml_varnish_origin[-1].split('|')[0] + " {\n" + "\t.host = \"" + xml_varnish_origin[-1].split('|')[1] + "\";\n\t.port = \"" + xml_varnish_origin[-1].split('|')[2] + "\";\n}\n#origin_backend_end#\n" all_str= ft_bk + k + lt_bk #print all_str return all_strdef gen_origin_str(): k = "" xml_varnish_origin = parse_xml(filexml,"varnish","origin","value") ft_o = "#origin_start#" + "\n" + "if (req.http.host ~ \"^" + xml_varnish_origin[0].split('|')[0] + "$\") {\n" + "set req.backend=" + xml_varnish_origin[0].split('|')[0] + " ;\n}" #print ft_o #print xml_varnish_origin[1:] for i in xml_varnish_origin[1:]: #print i j = " elsif (req.http.host ~ \"^" + i.split('|')[0] + "$\") {\n" + "set req.backend=" + i.split('|')[0] + " ;\n}" k += j lt_o = " else {\n" + "error 404 \"Unknown virtual host\";\n" + "}\n#origin_end#\n" #print ft_o + k + lt_o return ft_o + k + lt_odef check_varnishd(): file_vd_cf = open(file_vd,'r') xml_varnish_status = parse_xml(filexml,"varnish","status")[0] xml_varnish_storage = parse_xml(filexml,"varnish","storage")[0] #xml_varnish_origin = parse_xml(filexml,"varnish","origin","value") conf_varnish_status = bu_cv0(str(os.system('ps aux | grep -v grep | grep -q varnishd'))) conf_varnish_storage = "VARNISH_STORAGE_SIZE=" + fetch_conf(file_vd_cf,'VARNISH_STORAGE_SIZE') file_vd_cf.close() fl_vf = open(file_vf,'r') fl_vf_all = fl_vf.read() m1 = re.search('#origin_backend_start#(\n.*)*#origin_backend_end#\n',fl_vf_all) if m1 is not None: conf_varnishd_backend = m1.group() fl_vf.close() fl_vf2 = open(file_vf,'r') fl_vf_all2 = fl_vf2.read() m2 = re.search('#origin_start#(\n.*)*#origin_end#\n',fl_vf_all2) if m2 is not None: conf_varnishd_origin = m2.group() fl_vf2.close() xml_varnishd_backend = gen_backend_str() xml_varnishd_origin = gen_origin_str() if xml_varnishd_backend != conf_varnishd_backend: print "conf_varnishd_backend is wrong, Begin replace the wrong conf..." print xml_varnishd_backend print conf_varnishd_backend file_replace('/usr/local/varnish_214/etc/varnish_01.conf',conf_varnishd_backend,xml_varnishd_backend) #os.system('service varnishd restart') else: print xml_varnishd_backend print conf_varnishd_backend print "conf_varnishd_backend is ok" if xml_varnishd_origin != conf_varnishd_origin: print xml_varnishd_origin print '------------------' print conf_varnishd_origin print "conf_varnishd_origin is wrong, Begin replace the wrong conf..." file_replace_escap('/usr/local/varnish_214/etc/varnish_01.conf',conf_varnishd_origin,xml_varnishd_origin) #os.system('service varnishd restart') else: print xml_varnishd_origin print '------------------' print conf_varnishd_origin print "conf_varnishd_origin is ok"def main(): while True: time.sleep(3) daemonize() check_pn() check_in() check_sysctl_fs() check_cache() check_varnishd() gen_backend_str() gen_origin_str() check_varnishd()if __name__ == '__main__': main()
相关内容
- 快速多线程ping,多线程ping,[Python]代码#!
- 在VIM中使用GOOGLE进行搜索或者翻译,vimgoogle,[Python]代码
- secure crt 脚本,securecrt,[Python]代码#$
- hashlib穷举字典破解md5,sha1,hashlibsha1,初步完工,在U
- python求素数的一句话代码 lambda实现,pythonlambda,#在交互
- 用python计算(1+2+3+4……+100),python,[Python]代码n=
- python修改操作系统时间的代码,python操作系统,#-*- cod
- python根据出生年份计算生肖的代码,python出生年份,#计
- 解数独,,[Python]代码#!
- 解24点,,[Python]代码#!
评论关闭