1

次のようなコマンドを実行しています

getHosts | xargs -I{} -P3 -n1 ssh {} 'startServer; sleep 5; grep -m 1 "server up" <(tail -f log)'

問題は、サーバーが起動した後でも、ssh がしばらくハングしているように見えることです。このコマンドには、並列実行を継続できるように終了しない原因となる問題はありますか? リモートシェルでコマンドを実行すると、サーバーが起動するかどうかのチェックは信頼できるように見え、ログに「server up」が書き込まれると時間厳守で終了します。

4

2 に答える 2

1

リモートコマンドの代わりに

startServer; sleep 5; grep -m 1 "server up" <(tail -f log)

私は使うだろう

grep -m 1 "server up" <(tail -F log -n 0) & startServer ; wait

違い:

  • メッセージを見逃さないように、サーバーを再起動するにログの追跡を開始します。ログの最後から開始するため、以前の「サーバー稼働」メッセージは表示されません。
  • tailの代わりにの-Fオプションを使用-fして、ログ ファイルがローテーションされた場合に古いファイルを無用に追跡し続けるのではなく、新しいファイルを追跡するようにします。
于 2012-06-30T08:25:51.893 に答える
1

終了に失敗する 2 つの方法:

  1. リモートエンドがハングオンstartServer
  2. サーバーは「サーバーアップ」後に非常に多くのメッセージを生成し、tail -fその行をキャッチせず、永遠に待機tailします(デフォルトでは、最後の10行を取るため)

sshまた、ホストのダウン、キーの紛失など、さまざまな理由で接続に失敗する可能性があります。ログへの書き込みおよび/または

|| echo "Failed to do stuff" | mail -s SUBJECT TO@WHO.com
于 2012-06-30T00:43:31.470 に答える