リモートでタスクを開始できるコマンドラインインターフェイスを持つCIサーバーがあります(jenkins
CIサーバーとjenkins-cli.jar
ツール)。
作業を開始したら、tail -f
以下を記録します(コマンドが混乱して申し訳ありません)。
ssh -t my-jenkins-host.com "tail -f \"/var/lib/jenkins/jobs/$job_name/builds/\`ls -ltr /var/lib/jenkins/jobs/$job_name/builds/ | grep '^l' | tail -n 1|awk '{print \$9}'\`/log\""
ジョブが正常に完了すると(通常少なくとも5分)、出力に次の行が表示されます。
Finished: SUCCESS
この時点でログテーリングを停止する良い方法はありますか?同様のコマンドがありますかtail_until 'some line' my-file.log
?
ボーナス:SUCCESSが一致した場合は0を返し、FAILUREが一致した場合は1を返す答えを提供でき、ソリューションがMacで動作する場合! (私はそれがbsdベースであると信じています)
ベストアンサー1
tail -f
にパイプを接続しsed
て検索中の行を見つけたら、終了するように指示できます。
tail -f /path/to/file.log | sed '/^Finished: SUCCESS$/ q'
sed
デフォルトでは、処理するすべての行を印刷し、その行を見ると終了します。tail
次の行を書き込もうとすると、出力パイプが破損していることが判明した場合、プロセスは停止します。