
이 스크립트는 로그 파일에서 "ora" 패턴을 모니터링하고 오류 세부 정보를 가져와 이메일을 보냅니다. 이 경우 로그 파일에 있는 마지막 오류만 가져오고 싶습니다. 5분마다 crontab을 설정했기 때문에 grep은 잘못된 경고를 유발하는 동일한 이전 오류를 제거합니다. 스크립트는 현재 시간에 오류가 발생해야 하며 이전 오류를 찾는 것을 피해야 합니다.
mailto=xyz.email.com
logdirectory=/location/to/logfile
cd $logdirectory
grep "ORA" logfile
if [ $? = 0 ]; then
mailx -s "errors" $mailto
fi
내 로그 파일:
Fri Jun 07 05:09:32 2019 Archived Log entry 93 added for thread 1 sequence 59 ID 0xf10d426f dest 1:
Fri Jun 07 11:08:20 2019 07-JUN-19 ORA-1100: Testing, Please Ignore
답변1
awk -v parseLog='/some/where/filename' '
BEGIN {
prevNR=( (getline line < parseLog) > 0 ? line : 0 )
}
(NR>prevNR) && /ORA/{ print; found=1 }
END {
print NR > parseLog
exit !found
}
' /location/to/logfile
또는 쉘에서:
parseLog='/some/where/filename'
IFS= read -r line < "$parseLog"
if [[ -n "$line" ]]; then
prevNR="$line"
else
prevNR=0
fi
nr=$(wc -l < /tmp/logfile)
head -"$nr" /location/to/logfile |
tail +"$(( "$prevNR" + 1 ))" |
grep ORS
rslt=$?
printf '%d\n' "$nr" > "$parseLog"
먼저 줄 수를 가져와야 하며 , 해당 줄 수에 대해 파이프를 wc
연결하고 그 줄을 tail로 연결한 다음 grep해야 합니다. 그렇지 않으면 로그 파일이 와 사이에 커질 수 있으며 다음 줄에서 한 줄을 놓칠 수 있습니다. 반복하거나 순서를 바꾸면 동일한 줄을 두 번 구문 분석할 수 있습니다.head
grep
wc
위의 내용은 로그 파일에 쓰는 작업이 한 줄에 1개의 원자적 작업으로 수행된다고 가정합니다. 줄의 일부를 별도로 쓴 다음 완료되면 줄바꿈을 추가하는 경우 마지막 줄(아마도 부분 줄)을 무시해야 합니다. 위 구문 분석을 위한 로그 파일입니다.