【问题标题】:Python script to run background services over SSH通过 SSH 运行后台服务的 Python 脚本
【发布时间】:2013-05-30 13:01:12
【问题描述】:

总结:我正在 ssh'ing 到远程服务器并在那里执行一个 fork1.py 脚本,如下所示。但问题是我希望进程在后台执行,这样我就可以启动多个服务。 我知道我们可以使用 nohup 等,但它们不起作用。即使我在最后使用 & ,进程也会启动,但在脚本终止时会被终止。

代码如下:

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

我哪里错了?

【问题讨论】:

  • 你需要守护进程。这与python或ssh无关,Linux就是这样工作的。
  • 看看这个stackoverflow.com/questions/89228/…的答案。向下滚动一点。我认为这可能是您正在寻找的。​​span>

标签: python linux ssh subprocess


【解决方案1】:

试试看

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

【讨论】:

  • 你的意思是说我不应该使用 fork 而使用 os.system 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 2011-01-23
  • 1970-01-01
相关资源
最近更新 更多