2013-06-04 77 views
1

摘要:我正在向远程服务器ssh'ing,并在那里执行一个fork1.py脚本,如下所示。但麻烦的是我希望进程在后台执行,以便我可以启动多个服务。 我知道我们可以使用nohup等,但他们不工作。即使在最后使用&时,该过程也会开始,但脚本终止时会被终止。通过SSH运行后台服务的Python脚本

下面是代码:

import os 
import sys 
import commands 
from var import key_loc 
import subprocess 
import pipes 
import shlex 

def check(status): 
    if status != 0: 
     print 'Error! ' 
     quit() 
    else: 
     print 'Success :) ' 
    file1=open('/home/modiuser/status.txt','a') 
    file1.write("Success :)\n") 

if(sys.argv[1]=="ES"): 
    os.chdir('/home/modiuser/elasticsearch-0.90.0/bin/') 
    proc1=subprocess.Popen(shlex.split("nohup ./elasticsearch -p /home/modiuser/es.pid")) 
if(sys.argv[1]=="REDIS"): 
    os.chdir('/home/modiuser/redis-2.6.13/src') 
    proc2=subprocess.Popen(shlex.split("./redis_ss -p /home/modiuser/redis.pid")) 
if(sys.argv[1]=="PARSER"): 
    proc3=subprocess.Popen(shlex.split("nohup java -jar logstash-1.1.12-flatjar.jar agent -f parser.conf")) 
    file1=open('/home/modiuser/pid.txt','a') 
    file1.write("PARSER-"+str(proc3.pid)+"\n") 
    file1.write(str(proc3.poll())) 
    file1.close() 
if(sys.argv[1]=="SHIPPER_TCP"): 
    proc4=subprocess.Popen(shlex.split("nohup java -jar logstash-1.1.12-flatjar.jar agent -f shipper_TCP.conf")) 
    file1=open('/home/modiuser/pid.txt','a') 
    file1.write("SHIPPER_TCP-"+str(proc4.pid)+"\n") 
    file1.close() 

我要去哪里错了?

+0

你需要守护进程。这与python或ssh无关,这就是Linux的工作原理。 – kirelagin

+0

看看这个http://stackoverflow.com/questions/89228/calling-an-external-command-in-python#2251026的答案。向下滚动一下。我认为这可能是你正在寻找的。 – pypat

回答

0

只是尝试用

import os 
os.system('python program1.py &') #this one runs in the background 
os.system('python program2.py') #this one runs in the foreground 
+0

你的意思是说我不应该使用fork并使用os.system来代替? – user2359303