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