リモートサーバーには、次のようなスクリプト test.sh があります。
#!/bin/bash
echo "I'm here!"
nohup sleep 100&
ローカルから「fab runtest」を実行して、リモートの test.sh を呼び出します。
def runtest():
run('xxxx/test.sh')
「I'm here!」という出力は得られますが、リモート サーバーでスリープ プロセスが見つかりません。私は何を取りこぼしたか?
ありがとう!
リモート マシンのスクリプト内で nohup を実行することは可能ですか?
ここで答えとFabric FAQを確認しました。また、ファブリックからヒントを得て、apache2 を開始するように見えますが、開始しないので、それらを組み合わせるとうまくいきます。
変更せずに保持し、関連するシェル リダイレクトtest.shを追加できます。pty=False
from fabric.api import *
def runtest():
run("nohup /tmp/test.sh >& /dev/null < /dev/null &",pty=False)
少なくとも、それは私にとってはうまくいきます。
ファブリック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')動作します。