CF CLIを使用してCloud Foundry用のデプロイスクリプトを作成しており、分析用に開始された新しいアプリケーションに関連するログをキャプチャしたいと思います。これには通常、cf push [appname] -f [manifest.yml]
2つの異なるコマンドが必要ですcf logs [appname] > [appname].log
。問題は、プッシュコマンドが半分まで実行されるまでアプリがまだ存在せず、cf logs
正常に実行するには既存のアプリが必要なことです。
私はスクリプトが出力ストリームを読み取り、サービスが作成されたことを示す行を見つけて、cf push
2番目のスレッドでコマンドを実行してそのログをキャプチャすると思いました。私は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 logs
grep が失敗した場合、&&
オペレータは次のことを行います。いいえcf logs
コマンドを実行してください。コードをかっこよく包むためにバックスラッシュを使用しています。コマンドはすべて1行にすることができます\
。&&
詳細については、次をご覧ください。シェルの制御およびリダイレクト演算子は何ですか?