Como determinar o arquivo recém-fechado dentro de uma rotação contínua do log de auditoria?

1

Eu estou tentando encontrar a melhor maneira de determinar quando o segundo arquivo (de um critério de correspondência) é criado. O contexto é uma rotação de log de auditoria.

Dado um diretório onde os logs de auditoria são criados a cada hora, eu preciso executar um script parsing awk no log de auditoria que foi fechado. O que quero dizer com isso, é que a cada hora um novo log de auditoria é criado e o log de auditoria antigo é fechado, contendo até um valor de horas de informações. O novo arquivo de log deve ser deixado em paz até que ele também seja fechado e um novo seja criado.

Eu poderia criar um script de shell bash e usar find /home/tomcat/openam/openam/log -name amAuthentication.* -mmin -60 e depois executá-lo a cada 10 minutos por meio de uma entrada crontab , mas não sei como escrever o resto.

Suponho que o script poderia começar salvando o conteúdo dessa descoberta em um arquivo temporário e, a cada crontab execução, comparar o novo conteúdo do comando de localização e, quando ele for alterado, usar o arquivo temporário como entrada para o arquivo. script awk. Quando o script awk estiver concluído, salve o conteúdo da nova descoberta no arquivo.

Um colega sugeriu que eu usasse o 'sticky bit' da velha escola para sinalizar arquivos processados. Talvez este seja o caminho a seguir.

    
por D-Klotz 21.07.2014 / 20:59

2 respostas

0

Para o encerramento, este é o começo do script que vou usar. Ele precisa de mais trabalho para torná-lo robusto e fazer logging, mas você deve ter uma ideia geral.

#!/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
    
por 22.07.2014 / 17:34
0

Tente usar inotifywait para isso:

inotifywait -e close_write /home/tomcat/openam/openam/log/CURRENT_OPENED_LOG_FILE
    
por 21.07.2014 / 22:06