2013-01-24 82 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 &") 

此外,這些系統命令需要在裏面,如果條件。