【发布时间】:2014-10-02 05:12:49
【问题描述】:
我正在运行一个 python 脚本,该脚本涉及在远程计算机上运行“burnP6”后台进程。
我尝试使用面料:
import fabric.api
fabric.api.execute(run_burnP6_bg, hosts=[remote_machine])
def run_burnP6_bg():
fabric.api.run("burnP6 &")
我还尝试将 ssh -f 与子进程一起使用:
import subprocess
def cpu_load(receiver, load_percent='100', time_seconds='3'):
if 1<= load_percent and 100 >= load_percent:
cmd = 'ssh -f xyz@{1} '.format(ip_addr) + "'burnP6 &'"
subprocess.call(cmd.split(' '))
elif 0 == load_percent:
# No load to be added
pass
但是他们两个都没有工作。在远程服务器上运行 top 我没有看到任何 burnP6 进程。
我有什么遗漏吗?
【问题讨论】:
-
试试
fabric.api.run("(nohup burnP6 &)")。对于 supbrocess 使用shlex.split()而不是str.split()。我怀疑您的“命令”未按预期解析。使用-l user而不是@。使用“disown -a”和nohup来保持进程运行,即使在它使用的终端关闭后也是如此。一般来说,先测试你的 ssh 命令,然后再尝试将其推送到 python/fabric。 -
谢谢。错误在于分裂。我需要我的 cmd 列表格式为:['ssh', '-f', 'acelio', 'nohup burnP6 &']
标签: python ssh cpu-usage fabric