これを実行するリモートサーバーでstart.sh
スクリプトを実行します。
Nohup node server.js &
単純に、私はこのようにSSHを呼び出します:
ssh myserver <<EOF
./start.sh &
EOF
これによりスクリプトが開始されますが、セッションは接続されたままになります。スクリプト内の他のコマンドを使用してこの手順を実行したいので、それは良くありません。
リモートマシンにSSHで接続し、Nohup
コマンドをバックグラウンドで起動してから切断するにはどうすればよいですか? SSHプロセス自体をバックグラウンドに入れることができると思いますが、それは正しくないようです。
あなたはすでに正しい方法を見つけました、ここ文書。
NOTE:最後に&を置くことでssh(クライアント)をバックグラウンドに入れることができますが、出力は表示されません。これを本当に行いたい場合は、リモートホストからの応答を確認する必要がある場合に備えて、stdout/stderrをファイルにリダイレクトします。
基本的には、次のいずれかの方法で実行できます。
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
なぜtmuxまたはscreenだけで終わらせないのですか?例えば:
$ tmux new -s SessionNameHere
$ Nohup /path/to/your/script.sh
これは、継続的にループするか、完了するまでに時間がかかるものである場合に実用的です。セッションから切断でき、アクティブのままになります。
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セッションをすぐに終了します。
短い形式:
ssh Host "(command 1; command 2; ...) &>/dev/null &"
Bash自体がターミナルからのデタッチを実行するように見えるため、Nohupは必要ありません。 Ubuntu 14.04 x86_64、bash 4.3.11。を実行します.