fabric无法使用nohup调用远程脚本
在远程服务器上,我有一个名为 test.sh 的脚本,内容如下:
#!/bin/bash
echo "I'm here!"
nohup sleep 100&
我从本地运行 'fab runtest' 来调用远程的 test.sh。
def runtest():
run('xxxx/test.sh')
我能看到输出 "I'm here!",但是我在远程服务器上找不到 sleep 这个进程。请问我漏掉了什么?
谢谢!
3 个回答
2
我们遇到了这个问题,发现可以在命令中使用 nohup
,但不能直接在脚本里使用。
举个例子,像这样 run('nohup xxxx/test.sh')
是可以正常工作的。
3
根据Fabric的常见问题解答,你现在不能有效地在后台运行程序了。相反,你应该使用tmux、screen、dtach,或者更好的选择是使用python daemon包:
import daemon
from spam import do_main_program
with daemon.DaemonContext():
do_main_program()
6
可以在远程机器的脚本中运行nohup吗?
我查看了这里的答案和Fabric常见问题,还从fabric似乎启动了apache2但没有中得到了提示,最后把这些信息结合起来用,效果不错。
你可以保持你的test.sh
不变,然后添加pty=False
和相关的shell重定向。
from fabric.api import *
def runtest():
run("nohup /tmp/test.sh >& /dev/null < /dev/null &",pty=False)
至少对我来说,这样做是有效的。