Aqui está uma simples prova de conceito:
Em myscript.sh:
#!/bin/bash
while read -r line; do
echo "syslog says: $line"
done
Em um terminal:
$ tail -n 0 -F /var/log/syslog | ./myscript.sh
(observe que estou usando -n 0
porque não quero processar nenhum conteúdo de log anterior; se você quiser processá-lo all , altere esse para -n +1
para iniciar a cauda a partir da primeira linha). Eu também estou usando -F
em vez de -f
, de modo que a cauda tente novamente se o arquivo original ficar inacessível - por exemplo, como resultado de ser rotacionado.
Em um terminal diferente
$ logger "logger says hello"
Você deve ver imediatamente no primeiro terminal algo como
syslog says: Dec 11 13:48:54 T61p steeldriver: logger says hello
Se não funcionar, talvez seja porque o que quer que esteja gravando no arquivo de log está fazendo isso de forma bufferizada, ou você está processando-o de maneira bufferizada dentro do seu script ( grep
às vezes é o culpado: ele tem uma opção --line-buffered
que pode ser útil nesse caso).