Continuamente seguindo um arquivo de log rotativo com data e hora no nome do arquivo

1

Eu tenho um arquivo de log no formato log_name_YY-MM-DD_HH_mm.log . O registro gira a cada duas horas e o novo registro é criado contendo a data e a hora da criação. Às vezes, preciso acompanhar a saída ao vivo deste log com o comando tail -f . Depois que o log é girado, a cauda ainda aponta para o nome do arquivo antigo e deve ser reiniciado manualmente com o novo nome de arquivo.

Existe uma maneira de alternar automaticamente tail -f para usar o novo arquivo? A opção tail -F ( tail --follow=name --retry ) não funciona neste caso porque o nome do arquivo do registro é alterado.

    
por CyberMuz 25.02.2017 / 19:13

1 resposta

2

Você pode criar um script para acompanhar o arquivo de log mais recente em segundo plano e, em seguida, verificar regularmente se há um novo arquivo de log. Se houver um novo arquivo de log, elimine o processo antigo e inicie o novo arquivo.

Algo como:

#!/bin/bash

PATTERN='log_name_??-??-??_??_??.log'

CURRENT=any_pattern # dummy pattern to start off first tail -f

while true; do
   NEWLOG='ls -t $PATTERN|head -n1'
   if [[ $NEWLOG != $CURRENT ]]
   then
      kill $TAILPID 2>/dev/null
      CURRENT=$NEWLOG
      tail -f $CURRENT &
      TAILPID=$!
   fi
   sleep 1 # check regularly
done
    
por 26.02.2017 / 01:08