2番目のコマンドの出力に基づいてイベントをトリガします。

2番目のコマンドの出力に基づいてイベントをトリガします。

CF CLIを使用してCloud Foundry用のデプロイスクリプトを作成しており、分析用に開始された新しいアプリケーションに関連するログをキャプチャしたいと思います。これには通常、cf push [appname] -f [manifest.yml]2つの異なるコマンドが必要ですcf logs [appname] > [appname].log。問題は、プッシュコマンドが半分まで実行されるまでアプリがまだ存在せず、cf logs正常に実行するには既存のアプリが必要なことです。

私はスクリプトが出力ストリームを読み取り、サービスが作成されたことを示す行を見つけて、cf push2番目のスレッドでコマンドを実行してそのログをキャプチャすると思いました。私は2番目のプロセスの出力を調べて2番目のプロセスをトリガーするcf logsメカニズムを探しています。cf push

2つの質問

  • 可能ですか?
  • 合理的なアプローチに関する文書を見つけるために、このようなものを何と呼ぶべきですか?

答え1

サービスを開始した後にのみシーケンスが完了することを考慮するとcf push(または私の考えが失敗した場合)、パイプラインを一緒に接続できます(英語)。 「cf pushを起動して「成功」メッセージを探します。メッセージが表示されたら、次を実行します。cfログ」。

シェル構文では、次のようになります(例コマンドを使用)。

cf push [appname] -f [manifest.yml] | grep -q "service has been created" && \
 cf logs [appname] > [appname].log

これはシェルのパイプを使用してcf push出力をコマンドにgrep接続します。 grepコマンド(-qは静かであることを意味します)は、成功したメッセージを検索します(使用された文字列を実際に生成されcf pushた文字列に置き換えます)。 grep このメッセージが見つかると、成功コードで終了します。これにより、オペレータはコマンドを&&実行できます。cf logsgrep が失敗した場合、&&オペレータは次のことを行います。いいえcf logsコマンドを実行してください。コードをかっこよく包むためにバックスラッシュを使用しています。コマンドはすべて1行にすることができます\&&

詳細については、次をご覧ください。シェルの制御およびリダイレクト演算子は何ですか?

関連情報