inotify
é usado para monitorar arquivos em um diretório pelo inode, não pelo nome. Quando o arquivo é girado, seu conteúdo não muda mais (exceto por um curto período, até que os daemons sejam recarregados para que usem o arquivo de log recém-criado)
AFAIK, tail -f
usa o sistema inotify, por isso não ajuda. Mas se você tiver uma solução de trabalho com tail -f
, use tail --follow=name
(ou tail -F
) se isso for suportado pela sua versão de tail
(a cauda POSIX não suporta isso). O tail
irá então monitorar o arquivo identificado pelo seu nome de arquivo. Aqui está um trecho da página man:
With --follow (-f), tail defaults to following the file descriptor, which means that even if a tail'ed file is renamed, tail will con‐ tinue to track its end. This default behavior is not desirable when you really want to track the actual name of the file, not the file descriptor (e.g., log rotation). Use --follow=name in that case. That causes tail to track the named file in a way that accommodates renaming, removal and creation.
[atualização]
Exemplo de uso:
tail -n0 -F my_file.log \
| while read -r log_line; do
do_something_with "$log_line"
done
Por causa do pipe, o loop while é executado em um subprocesso, o que pode causar problemas se você quiser modificar variáveis fora do loop. Se você usa bash
, você pode querer usar essa sintaxe alternativa que não tem esse efeito indesejável (mas é menos legível):
while read -r log_line; do
do_something_with "$log_line"
done < <(tail -n0 -F my_file.log)