web-dev-qa-db-ja.com

子プロセスを順番に追跡する

sshpassによって、リモートサーバーでいくつかのコマンドを実行しています。

  gnome-terminal --maximize 
  --tab --title='aTask' -e "sshpass -p "afsd@#$5u89f"  ssh [email protected] 'command1 && command2'" \

だから私の質問は、私の最後のコマンドがmvn clean installの場合、ビルドが成功したことをどうやって知ることができるかということです。

ある意味で、最初の子プロセスがすべてのコマンドを正常に完了したかどうかを追跡して、別の子プロセスを順番に開始できるようにする必要があります。

1
MayankD

順次実行する場合は、終了コードだけで十分です。

command && echo "it worked"

または

command || echo "we are having a bad day"

Gnome-terminalまたはsshpassが正しいリターンコードファイルを返さない場合は、バグレポートを作成し、別の方法を使用してください。

並列で実行する場合は、 xargs -Pまたは parallel を使用します。

終了ステータスは、実行された各コマンドの終了ステータスの組み合わせであり、OR演算されます。 (したがって、いずれかのコマンドがゼロ以外で終了すると、全体として並列はゼロ以外で終了します。)

コマンドの1つが実行前に戻ってくる場合は、別の方法を使用するか、コマンドに非同期のデザインパターンを採用させます(車輪の再発明)。

 ; echo $(date) $? > task1.r

次に、すべてのタスクが完了するのを待ちます。

while [ $(cat task*.r 2>/dev/null | wc -l) -lt $TASK_COUNT ] ; do
    sleep 1
done
grep -P " [^0]$" task*.r && echo "we are having a bad day"
2
user1133275