SSH経由でジョブを開始し、複合コマンドから分離

SSH経由でジョブを開始し、複合コマンドから分離

SSHで長期実行スクリプトを起動し、すぐに返したいと思います。その後、5分ごとにリモートホストを確認して、ジョブが完了したことを確認したいと思います。

最初の部分を完了するために、以下を使用しました。このトリック:

ssh root@remoteserver 'TMP_FILE=$(mktemp --tmpdir backup.XXXXXXXXXX.log) && (/root/backup.sh </dev/null > $TMP_FILE 2>&1 &) && echo $TMP_FILE'

DONE_$TMP_FILE2番目の部分では、backup.shが任意のスクリプトである可能性があるため、backup.shが終了したときに指すファイルに次の内容を追加し、$TMP_FILE5分ごとにこのコマンドを実行しようとしています。

ssh root@remoteserver 'tail -1 $TMP_FILE'

最後の行が同じであることを確認してくださいDONE_$TMP_FILE

問題は、複合コマンドから抜け出すことができないことです。

ssh root@remoteserver 'TMP_FILE=$(mktemp --tmpdir backup.XXXXXXXXXX.log) && (/root/backup.sh </dev/null > $TMP_FILE 2>&1 && echo DONE_$TMP_FILE >> $TMP_FILE &) && echo $TMP_FILE'

上記のコマンドは、backup.sh実行が完了するまで単にブロックされます。

ラッパーシェルスクリプトに入れずに一連のコマンドを分離する方法はありますか?

もっと良い方法があれば聞きたいです。理想的には、ヘルパーシェルスクリプトを作成する必要はありません。

ベストアンサー1

解決策は思ったより簡単でした。

ssh root@remoteserver 'TMP_FILE=$(mktemp --tmpdir backup.XXXXXXXXXX.log) && ((/root/backup.sh && echo DONE_$TMP_FILE) </dev/null > $TMP_FILE 2>&1 &) && echo $TMP_FILE'

おすすめ記事