0

snmpdと実行中のソケットスクリプトを継続的にチェックするPythonスクリプトがあります。これらのいずれかが強制終了された場合は、両方を強制終了して新しいセッションを開始する必要があります。問題は、ソケットが実行されると、接続を長時間待機することです。その間に、誰かがsnmpdを強制終了した場合、開始されません(ループバックしないと考えてください)。理由と考えられる解決策は何でしょうか。コードの最適化は可能ですか?

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'
4

1 に答える 1

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 &")

また、これらのシステム コマンドは if 条件内にある必要があります。

于 2013-01-24T08:00:25.383 に答える