변수에 연속 스트림을 할당하고 변수를 처리합니다.

변수에 연속 스트림을 할당하고 변수를 처리합니다.

제가 가지고 있는 사용자 정의 로그에 대한 분석기를 만들려고 합니다.

내 로그 파일에는 밀리초 단위의 기간 타임스탬프가 있으며 다른 파일에서 해당 로그 파일을 필터링하고 임계값 타임스탬프를 초과하는 로그가 이메일이나 IM을 통해 나에게 전송되도록 하려고 합니다.

현재 저는 여러 다른 명령과 함께 파이프되는 명령의 출력을 tail -f변수에 할당한 다음 변수의 값을 처리하려고 합니다. 하지만 간단한 로깅조차 성공하지 못했습니다 echo.

이것은 내가 사용하는 스크립트의 가장 간단한 형식입니다.

log=$(tail -f $logFile | grep ms | rev | cut -c 3- | rev | awk '{ if($NF > $monitorTreshold) {  print $0 }  }')
for q in log; do
  echo "Query : $q"
done

답변1

Kusalananda가 언급했듯이 파이프는 절대 빠져나오지 않으므로 $log가치를 얻지 못합니다.

또한 grep버퍼링된 출력이 표시되지 않을 수도 있습니다 stdout.

따라서 다음과 같이 데이터를 셸 루프에 직접 연결하여 실시간으로 데이터를 처리해야 합니다.

tail -f $logFile | grep --line-buffered ms | rev | cut -c 3- | rev | awk '{ if($NF > $monitorTreshold) {  print $0 }  }' | while read q
do
  echo "Query : $q"
done

예를 들어 셸에서 bashthen 루프 내에 설정된 변수는 루프 외부에 표시되지 않습니다. 그것들은 ksh93설정될 것입니다. 이러한 변수를 설정해야 하는 경우 bash코프로세싱을 살펴보는 것이 좋습니다.

관련 정보