web-dev-qa-db-ja.com

SSHでNohupコマンドを実行してから切断します

これを実行するリモートサーバーでstart.shスクリプトを実行します。

Nohup node server.js &

単純に、私はこのようにSSHを呼び出します:

ssh myserver <<EOF
./start.sh &
EOF

これによりスクリプトが開始されますが、セッションは接続されたままになります。スクリプト内の他のコマンドを使用してこの手順を実行したいので、それは良くありません。

リモートマシンにSSHで接続し、Nohupコマンドをバックグラウンドで起動してから切断するにはどうすればよいですか? SSHプロセス自体をバックグラウンドに入れることができると思いますが、それは正しくないようです。

45
Steve Bennett

あなたはすでに正しい方法を見つけました、ここ文書。

NOTE:最後に&を置くことでssh(クライアント)をバックグラウンドに入れることができますが、出力は表示されません。これを本当に行いたい場合は、リモートホストからの応答を確認する必要がある場合に備えて、stdout/stderrをファイルにリダイレクトします。

基本的には、次のいずれかの方法で実行できます。

コマンドを直接実行する{、s}

ssh user@Host "Nohup command1 > /dev/null 2>&1 &; Nohup command2; command3"

OR

ssh user@Host "$(Nohup command1 > /dev/null 2>&1 &) && Nohup command2 >> /path/to/log 2>&1 &"

NOTE&&は、2番目のコマンドを実行する前に最初のコマンドが0を返す必要がある

使用ドキュメント

ssh user@Host << EOF
Nohup command1 > /dev/null 2>&1 &
Nohup command2 >> /path/to/command2.log 2>&1 &
......
EOF

上記の3つのオプションが機能するはずです。

さらに、こちらの回答をご覧ください: https://askubuntu.com/a/348921/7027

40
Terry Wang

なぜtmuxまたはscreenだけで終わらせないのですか?例えば:

$ tmux new -s SessionNameHere
$ Nohup /path/to/your/script.sh

これは、継続的にループするか、完了するまでに時間がかかるものである場合に実用的です。セッションから切断でき、アクティブのままになります。

7
Anon
ssh node "Nohup sleep 10 &"

デーモンモードで実行されていないため、sshセッションを接続したままにします。 Nohupを使用したにもかかわらず、Sshセッションは10秒後に戻ります。

理由は、リモートstdoutとstderrがまだセッションに接続していることです。 sshセッションを維持しますが、Nohupは役に立ちません。

この:

ssh node "Nohup sleep 10 1>/dev/null 2>/dev/null &"

すぐに戻ります。 Nohupでリモートプロセスを開始し、sshセッションをすぐに終了します。

3

短い形式:

ssh Host "(command 1; command 2; ...) &>/dev/null &"

Bash自体がターミナルからのデタッチを実行するように見えるため、Nohupは必要ありません。 Ubuntu 14.04 x86_64、bash 4.3.11。を実行します.

2
Alek_A