2016-01-06 214 views
1

我的远程服务器上有一个像下面这样的python文件“run.py”。通过SSH在后台执行远程python脚本

import subprocess 
subprocess.Popen(["nohup", "python", "/home/admin/Packet/application.py", "&"]) 

我想从我的本地计算机上使用SSH运行该文件。我想下面。但是,我的本地终端卡在那里。它似乎并没有在后台运行。

ssh -n -f -i /Users/aws/aws.pem [email protected]_world.com 'python /home/admin/run.py'

运行命令后,我的终端卡住了。

+0

您可以婉使用https://en.wikipedia.org/ wiki/GNU_Screen – kfx

+0

@kfx,不,绝对不必要。问题是这个过程确实没有被发送到背景 –

+0

为什么它是一个python脚本?壳牌就足够简单了,不是吗? –

回答

1

以下是我正在使用的一个示例,您可以尝试类似这样的操作,自定义ssh_options。

import subprocess 
ssh_options = '-o ConnectTimeout=10 -o PasswordAuthentication=no -o PreferredAuthentications=publickey -o StrictHostKeyChecking=no' 
server_name = 'remote_server.domain' 
cmd = 'ssh ' + ssh_options + ' ' + server_name + ' "/usr/bin/nohup /usr/bin/python /home/admin/run.py 2>&1 &"' 
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 

之后,您可以将输出重定向到一个平面文件,更改:

2>&1 & 

为:

>> /path/lo/log_file.txt 2>&1 & 
+0

嘿,这个工程。但是,我想从远程服务器执行脚本。 – moeseth

+0

我的设置稍微复杂一些,但我所做的基本上是这样的,远程cmd下载脚本并调用解释器来执行它。“/ usr/bin/nohup/usr/bin/wget -T3 -qO - “+ args.url + args.script +”|“+ args.interpreter + .... – Claudio

相关问题