Como notar as mudanças no arquivo de log com as ferramentas padrão do Linux? [duplicado]

1

Eu preciso de algo que não precise ser instalado. Está em um sistema embarcado com muito pouco espaço no HD. Eu não posso instalar nada. Eu preciso fazer isso com algo que já está incluído.

Eu tenho um script que quero executar com base em uma determinada linha que aparece em um arquivo de log. Atualmente eu coloquei este script para rodar a cada 5 minutos no crontab e verifique o arquivo para mudanças.

Existe uma maneira de o sistema chamar o script apenas se o arquivo foi alterado? Tipo, para dizer ao sistema para disparar o script no caso de uma chamada do sistema ser feita para abrir o arquivo com permissão de gravação?

    
por Tom Klino 26.02.2014 / 16:31

2 respostas

1

Sim, existem várias maneiras de fazer isso. Eu geralmente uso iwatch .

$ touch yourfile
$ iwatch -e all_events  yourfile

depois de outro toque, você terá

[26/Feb/2014 17:02:39] IN_OPEN yourfile
[26/Feb/2014 17:02:39] IN_ATTRIB yourfile
[26/Feb/2014 17:02:39] IN_CLOSE_WRITE yourfile
[26/Feb/2014 17:02:39] * yourfile is closed
[26/Feb/2014 17:02:40] IN_OPEN yourfile
[26/Feb/2014 17:02:40] IN_CLOSE_NOWRITE yourfile

Você também pode executar um comando desejado se o arquivo for alterado:

 $ iwatch -e modify -c "ls -ls  yourfile" yourfile

depois de um

 cat /dev/null > yourfile

você receberá

-rw-r--r-- 1 root root 0 Feb 26 17:05 yourfile
    
por 26.02.2014 / 17:06
0

Se o programa criar os logs de mensagens por meio de syslog e seu sistema usar rsyslog , você poderá adicionar uma linha em rsyslog.conf (ou adicionar um arquivo em /etc/rsyslog.d ). Algo como:

facility.* :msg, isequal, "search line" ^/path/to/script

Você precisará descobrir se o mecanismo não está procurando em rsyslog.conf .

    
por 26.02.2014 / 18:52