두 번째 파일이 생성되는 시기(일치 기준)를 결정하는 가장 좋은 방법을 찾으려고 노력 중입니다. 컨텍스트는 감사 로그 회전입니다.
매시간 감사 로그를 생성하는 디렉터리가 있으면 awk
닫힌 감사 로그에 대한 구문 분석 스크립트를 실행해야 합니다. 즉, 매시간 새로운 감사 로그가 생성되고 최대 한 시간 분량의 정보를 포함하는 이전 감사 로그가 닫힙니다. 새 로그 파일은 해당 파일도 닫히고 새 로그 파일이 생성될 때까지 유지됩니다.
bash 쉘 스크립트를 만들어서 사용한 find /home/tomcat/openam/openam/log -name amAuthentication.* -mmin -60
다음 crontab
항목을 통해 10분마다 실행할 수 있지만 나머지는 어떻게 작성해야 할지 모르겠습니다.
스크립트가 해당 찾기 내용을 임시 파일에 저장한 다음 crontab
실행될 때마다 새로운 찾기 명령 내용을 비교하고 변경되면 임시 파일을 awk 스크립트에 대한 입력으로 사용하는 것으로 시작할 수 있다고 생각합니다. 스크립트가 완료되면 awk
새 찾기를 파일에 저장합니다.
한 동료가 처리된 파일을 표시하기 위해 구식 "고정 비트"를 사용할 것을 제안했습니다. 아마도 이것이 계속되는 길일 것입니다.
답변1
이것을 사용해 보세요 inotifywait
:
inotifywait -e close_write /home/tomcat/openam/openam/log/CURRENT_OPENED_LOG_FILE
답변2
마지막으로 사용할 스크립트의 시작 부분은 다음과 같습니다. 강력하게 만들고 로깅하려면 더 많은 작업이 필요하지만 일반적인 아이디어를 얻어야 합니다.
#!/bin/sh
# This script should be executed from a crontab that executes every 5 or 10 minutes
# the find below looks for all log files that do NOT have the sticky bit set.
# You can see the sticky bit with a "T" from a "ls -l".
for x in `find /home/tomcat/openam/openam/log/ -name "log-*" -type f ! -perm -1000 -print`
do
# Look for open files. For safety, log that we are skipping them
if lsof | grep $x > /dev/null; then
# create a log entry on why I'm not processing this file...
echo $x " is open"
else
# $x "is closed and not sticky"
# run the awk scripts to process the file!
echo $x " processing with awk..."
# Set the sticky bit to indicate we have processed this file
chmod +t $x
fi
done