在远程服务器中,我有一个脚本test.sh,如:
#!/bin/bash
echo "I'm here!"
nohup sleep 100&
从本地开始,我运行'fab runtest'来调用远程test.sh。
def runtest():
run('xxxx/test.sh')
我可以得到输出“我在这里!”,但我无法在远程服务器中找到睡眠过程。 我错过了什么?
谢谢!
答案 0 :(得分:6)
可以在远程机器的脚本中运行nohup吗?
我在这里检查了答案并Fabric FAQ,也从fabric appears to start apache2 but doesn't获得了提示,它可以让我将它们组合在一起
您可以保持test.sh
不做更改,并添加pty=False
相关的shell重定向。
from fabric.api import *
def runtest():
run("nohup /tmp/test.sh >& /dev/null < /dev/null &",pty=False)
至少,它对我有用。
答案 1 :(得分:3)
根据Fabric FAQ,您无法再有效地执行此操作。相反,你应该使用tmux,screen,dtach甚至更好地使用python daemon package:
import daemon
from spam import do_main_program
with daemon.DaemonContext():
do_main_program()
答案 2 :(得分:2)
我们遇到了这个问题,发现您可以在命令中使用nohup
,但不能在脚本本身中使用。
例如,run('nohup xxxx/test.sh')
有效。