2013-06-04 7 views
1

Résumé: Je suis en train de ssh sur un serveur distant et j'exécute un script fork1.py là-bas qui est montré ci-dessous. Mais le problème est que je veux que les processus s'exécutent en arrière-plan, afin que je puisse démarrer plusieurs services. Je sais que nous pouvons utiliser nohup, etc. mais ils ne fonctionnent pas. Même lorsque j'utilise un & à la fin, le processus démarre, mais est tué lorsque le script se termine.Script Python pour exécuter des services d'arrière-plan sur SSH

Voici le code:

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() 

Où vais-je tort?

+0

Vous avez besoin daemons. Cela n'a rien à voir avec python ou ssh, c'est comme ça que fonctionne Linux. – kirelagin

+0

jetez un coup d'oeil aux réponses de ce http://stackoverflow.com/questions/89228/calling-an-external-command-in-python#2251026. Faites défiler un peu. Je pense que cela pourrait être ce que vous cherchez. – pypat

Répondre

0

juste essayer avec

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

Vous voulez dire que je ne devrais pas utiliser fork et utiliser os.system à la place? – user2359303

Questions connexes