2013-01-24 79 views
0

我有一个python脚本,它不断检查snmpd和一个套接字脚本是否正在运行。如果其中任何一个被杀死,它应该同时终止并启动新的会话。问题 一旦套接字正在运行,它就等待连接很长时间,如果有人杀死了snmpd,它就不会开始工作(认为它不会循环回去)。可能是什么原因和一个可能的解决方案。代码的任何优化可能?不断从python脚本运行系统命令的问题?

def terminator(): 
    i=0 
    j=0 
    os.system("ps -eaf|grep snmpd|cut -d \" \" -f7 >snmpd_pid.txt") 
    os.system("ps -eaf|grep iperf|cut -d \" \" -f7 >iperf_pid.txt") 
    os.system("ps -eaf|grep sock_bg.py|cut -d \" \" -f7 >script_pid.txt") 
    snmpd_pids = tuple(line.strip() for line in open('snmpd_pid.txt')) 
    iperf_pids = tuple(line.strip() for line in open('iperf_pid.txt')) 
    script_pids = tuple(line.strip() for line in open('script_pid.txt')) 
    k1 = len(snmpd_pids) - 2 
    k2 = len(iperf_pids) - 2 
    k3 = len(script_pids) - 2 
    if (k1 == 0 or k3 == 0): 
     for i in range(k1): 
      cmd = 'kill -9 %s' %(snmpd_pids[i]) 
      os.system(cmd) 
     for i in range(k2): 
      cmd = 'kill -9 %s' %(iperf_pids[i]) 
      os.system(cmd) 
     for i in range(k3): 
      cmd = 'kill -9 %s' %(script_pids[i]) 
      os.system(cmd) 
    os.system("/usr/local/sbin/snmpd -f -L -d -p 9999") 
    os.system("python /home/maxuser/utils/python-bg/sock_bg.py") 
try: 
    terminator() 
except: 
    print 'an exception occured' 

回答

0

我找到了答案,它的问题得到了提示。 我使用了screen -d -m选项,现在能够获得预期的结果。

os.system("screen -d -m /usr/local/sbin/snmpd -f -L -d -p 9999 &") 
os.system("screen -d -m python /home/maxuser/utils/python-bg/sock_bg.py &") 

此外,这些系统命令需要在里面,如果条件。