sshリモートマシン、cd特定のディレクトリにログインしてからデーモンを開始するために使用するスクリプトがあります。元のスクリプトは次のようになります。
ssh server "cd /tmp/path ; nohup java server 0</dev/null 1>server_stdout 2>server_stderr &"
このスクリプトは正常に動作するようです。ただし、ユーザーが間違ったパスを入力してcd失敗した場合には堅牢ではありません。が原因で、このコマンドは失敗してもコマンド;を実行しようとします。nohupcd
明らかな修正は機能しません:
ssh server "cd /tmp/path && nohup java server 0</dev/null 1>server_stdout 2>server_stderr &"
つまり、サーバーが停止するまで SSH コマンドは戻りません。の前nohupではcdなく の前に置いてもjavaうまくいきませんでした。
誰でもこれを修正するのを手伝ってもらえますか? このソリューションが機能しない理由を説明できますか? ありがとう!
編集: cbuckley はsh -c、私が派生した の使用を提案しています:
ssh server "nohup sh -c 'cd /tmp/path && java server 0</dev/null 1>master_stdout 2>master_stderr' 2>/dev/null 1>/dev/null &"
ただし、現在、終了コードは常に失敗し0たときです。cd一方、ssh server cd /failed/pathそうすると、実際の終了コードが得られます。提案?