私は、サーバー上のバックグラウンドにコマンドを実行するには、以下のようにParamikoのexec_command
を使用します。paramikoのexec_commandによってサーバ上のバックグラウンドでコマンドを実行できますか?
client.exec_command('test > /dev/null 2 > &1 &')
しかし、私は「ps aux | grep test
」でプロセスを見ることはできません。
なぜこれができますか?
私は、サーバー上のバックグラウンドにコマンドを実行するには、以下のようにParamikoのexec_command
を使用します。paramikoのexec_commandによってサーバ上のバックグラウンドでコマンドを実行できますか?
client.exec_command('test > /dev/null 2 > &1 &')
しかし、私は「ps aux | grep test
」でプロセスを見ることはできません。
なぜこれができますか?
"test"コマンドは、指定された式によって決まるステータスで終了するため、終了します。
コマンドはバックグラウンドで実行されていますが、すぐに終了します。
別のコマンドを使用すると、バックグラウンドで実行されています。
ロブ
paramikoはあなたがbashでいたかのように通常のシェル魔法&
を追加する必要はありませんので、各.exec_command()
ためのスレッドを生成します。 .exec_command()
は即座に戻りますと、あなたはこれがspearateスレッドでstdoutにtest
リダイレクト標準エラー出力を実行します(標準入力、標準出力、sterr)
client.exec_command('test > /dev/null 2 > &1')
time.sleep(5)
client.exec_command('killall -9 test')
...
# the remot command will be force killed if you close the channel. (may depend on sshd implementation)
そのバッファを読むために世話をする必要があります。メインスレッドは5秒間スリープ状態になり、別のスレッドが生成されてテストが終了します。もしあなたがそれをkillしなければ、リモートのsshdはセッション中に生成されたすべてのprocsを処理します。
「スリープ100」。また、[nohup](http://ss64.com/bash/nohup.html)をチェックしてください。 –