私は同じことをやろうとしていましたが、Java からやろうとしていたために複雑さが増しました。したがって、Javaを実行している1台のマシンで、バックグラウンドで(nohupを使用して)別のマシンでスクリプトを実行しようとしていました。
コマンドラインから、これがうまくいきました:(ホストにsshする必要がない場合は、「-i keyFile」は必要ないかもしれません)
ssh -i keyFile user@host bash -c "\"nohup ./script arg1 arg2 > output.txt 2>&1 &\""
私のコマンド ラインでは、「-c」の後に 1 つの引数があり、すべて引用符で囲まれていることに注意してください。しかし、それが反対側で機能するには、引用符が必要なため、エスケープされた引用符をその中に入れなければなりませんでした。
Javaから、これがうまくいきました:
ProcessBuilder b = new ProcessBuilder("ssh", "-i", "keyFile", "bash", "-c",
"\"nohup ./script arg1 arg2 > output.txt 2>&1 &\"");
Process process = b.start();
// then read from process.getInputStream() and close it.
これを機能させるには少し試行錯誤が必要でしたが、今ではうまく機能しているようです。