문구의 마지막 15초를 적극적으로 파악하는 방법은 무엇입니까?

문구의 마지막 15초를 적극적으로 파악하는 방법은 무엇입니까?

이 bash 스크립트가 있고 스크립트 내에서 "상태 변경"이라는 단어에 대한 로그를 grep하려고 시도한 다음 "상태 변경"(가장 최근 상태 변경이라고도 함)이라는 단어가 포함된 최신 줄을 찾은 후 다음을 찾습니다. 에 "백업"이라는 단어가 있습니다.

문제는 로그가 최근 상태 변경 사항으로 업데이트될 시간을 갖기 위해 현재 먼저 15초 동안 절전 모드로 설정했다는 것입니다. 하지만 더 나은 솔루션을 원합니다.

사전에 상태를 확인하고 15초 후에만 실패를 보고하길 원합니다. 가능하다면 코드의 처음 두 줄만 바꾸고 나머지 코드도 수정할 계획입니다. 어떤 도움이라도 대단히 감사하겠습니다! 이것이 내가 현재 가지고 있는 것입니다:

    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

질문의 원래 버전에 대한 답변

명령 중 하나에 대해 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 ")}'

관련 정보