フレーズの最後の15秒を積極的に把握する方法は?

フレーズの最後の15秒を積極的に把握する方法は?

このbashスクリプトがあり、スクリプト内で「状態変更」という単語のログをgrepしようとし、「状態変更」(最も最近の状態変更とも呼ばれます)という単語を含む最新の行を見つけて、次を見つけます。に「バックアップ」という言葉があります。

問題は、ログが最新の状態変更で更新される時間があるように、現在最初に15秒間スリープモードに設定されていることです。しかし、より良いソリューションが欲しいです。

事前に状態を確認し、15秒後にのみ失敗を報告したいと思います。可能であれば、コードの最初の2行だけを変更し、残りのコードも修正する予定です。どんな助けでも大変感謝します!これが私が現在持っているものです:

    sleep 15
    ssh server_one@$1 "grep 'status change' /apps/tests/$2 | tail -1 | grep 'Backup'"
    Output=$?
    if [[ ${Output} -ne 1 ]] ; then
            echo "Pass: It is Backup"
            echo "Pass: It is Backup"  >> $REPORT 
    else
            echo "Fail: It is not Backup"
            echo "Fail: It is not Backup" >> $REPORT
    fi

答え1

質問の元のバージョンへの回答

コマンドの 1 つに対して grep-tail-grep-if コマンドを置き換えるには、次のようにします。

awk '/status change/{last=$0} END{printf "It is %sBackup\n",(last~/Active/?"":"not ")}' "/apps/tests/$2"

仕組み:

  • /status change/{last=$0}

    含まれている行が見つかるたびに変数status changeに保存されますlast

  • END{printf "It is %sBackup\n",(last~/Active/?"":"not ")}

    これは、ファイルの読み取りが完了した後に行われます。このとき、last最後の行に含まれる内容が含まれますstatus change。その行も含まれている場合はActive印刷しますIt is Backup。それ以外の場合は印刷しますIt is not Backup

    単語の有無はややnot複雑に見える三項門によって制御されます(last~/Active/?"":"not ")。このステートメントはlast~/Active/それが真であることを確認します(最後の行にが含まれていることを意味しますActive)。その場合、三項文は空の文字列を返します""。存在しない場合は文字列が返されます"not "

継続的なモニタリング

継続的なモニタリング:

ssh "server_one@$1" tail -f "/apps/tests/$2" | awk '/status change/{printf "It is %sBackup\n",($0~/Backup/?"":"not ")}'

関連情報