在后台使用 Fabric 的 Connection.run() 时脚本挂起
Script hangs while using Fabric's Connection.run() in the background
概览
我正在尝试使用 python fabric 运行 远程服务器上的 ssh 命令作为 root。
命令:nohup ./foo &
foo
预计将指挥 运行 几天。我必须能够解除 foo
与 fabric 远程 ssh 会话的关联,并将 foo
置于后台。
Fabric FAQ 说当你 运行 你的 fabric 脚本(运行 是后台命令)时,你应该使用 screen
或 tmux
之类的东西.我试过了,但我的结构脚本仍然挂起。 foo
没挂。
问题
如何在不挂起脚本的情况下在远程服务器上使用 fabric 运行 此命令:nohup ./foo &
详情
这是我的脚本:
#!/bin/sh
# Credit: https://unix.stackexchange.com/a/20895/6766
if "true" : '''\'
then
exec "/nfs/it/network_python/$OSREL/bin/python" "[=11=]" "$@"
exit 127
fi
'''
from getpass import getpass
import os
from fabric import Connection, Config
assert os.geteuid()==0, "ERROR: Must run as root"
for host in ['host1.foo.local', 'host2.foo.local']:
# Make an ssh connection to the host...
conn = Connection(host)
# The script always hangs at this line
result = conn.run('nohup ./foo &', warn=True, hide=True)
我总是打开一个 tmux
会话到 运行 上述脚本;即使这样做,当我到达上面的 conn.run()
时,脚本也会挂起。
我运行在 vanilla CentOS 6.5 虚拟机上运行脚本;它 运行 在 python 2.7.10 和 fabric 2.1 下。
Fabric 常见问题解答不清楚...我认为当我执行 Fabric 脚本时,FAQ 需要 tmux
在本地使用。
解决此问题的正确方法是将远程命令中的nohup
替换为screen -d -m <command>
。现在我可以在本地 运行 整个脚本而不会挂起(而且我不必在本地术语中使用 tmux
)。
明确地说,我必须将问题中脚本的最后一行重写为:
# Remove &, and nohup...
result = conn.run('screen -d -m ./foo', warn=True, hide=True)
概览
我正在尝试使用 python fabric 运行 远程服务器上的 ssh 命令作为 root。
命令:nohup ./foo &
foo
预计将指挥 运行 几天。我必须能够解除 foo
与 fabric 远程 ssh 会话的关联,并将 foo
置于后台。
Fabric FAQ 说当你 运行 你的 fabric 脚本(运行 是后台命令)时,你应该使用 screen
或 tmux
之类的东西.我试过了,但我的结构脚本仍然挂起。 foo
没挂。
问题
如何在不挂起脚本的情况下在远程服务器上使用 fabric 运行 此命令:nohup ./foo &
详情
这是我的脚本:
#!/bin/sh
# Credit: https://unix.stackexchange.com/a/20895/6766
if "true" : '''\'
then
exec "/nfs/it/network_python/$OSREL/bin/python" "[=11=]" "$@"
exit 127
fi
'''
from getpass import getpass
import os
from fabric import Connection, Config
assert os.geteuid()==0, "ERROR: Must run as root"
for host in ['host1.foo.local', 'host2.foo.local']:
# Make an ssh connection to the host...
conn = Connection(host)
# The script always hangs at this line
result = conn.run('nohup ./foo &', warn=True, hide=True)
我总是打开一个 tmux
会话到 运行 上述脚本;即使这样做,当我到达上面的 conn.run()
时,脚本也会挂起。
我运行在 vanilla CentOS 6.5 虚拟机上运行脚本;它 运行 在 python 2.7.10 和 fabric 2.1 下。
Fabric 常见问题解答不清楚...我认为当我执行 Fabric 脚本时,FAQ 需要 tmux
在本地使用。
解决此问题的正确方法是将远程命令中的nohup
替换为screen -d -m <command>
。现在我可以在本地 运行 整个脚本而不会挂起(而且我不必在本地术语中使用 tmux
)。
明确地说,我必须将问题中脚本的最后一行重写为:
# Remove &, and nohup...
result = conn.run('screen -d -m ./foo', warn=True, hide=True)