/ var / lib / logrotate / status obtém entradas inválidas

0

Estamos vendo nosso /var/lib/logrotate/status recebendo entradas inválidas, como segue:

saurabh@1236:~$ cat /var/lib/logrotate/status
logrotate state -- version 2
"/var/log/syslog" 2018-3-13
"/var/log/auth.log" 2018-3-13
"/var/log/debug" 2018-3-13
"/var/log/lpr.log" 2018-3-13
"/var/log/user.log" 2018-3-13
"/var/log/mail.info" 2018-3-13
"/var/log/cron.log" 2018-3-13
og/messages" 2018-3-13           <=== Corrupted entry
"/var/log/cron.log" 2018-3-13
"/var/log/messages" 2018-3-13

Não tenho certeza de como isso é corrompido dessa maneira. Acontece aleatoriamente após 10/12 dias.

Meu palpite é que pode ser por causa de vários crons editando esse arquivo, que está causando esse problema como vários tentando editar esse arquivo, mas não tenho certeza de que esse seja o problema. Para testar, adicionei um atraso aleatório em um dos crons recentes adicionado desta forma:

*/10 * * * * root sleep $(expr $RANDOM \% 90); /usr/sbin/logrotate -f /etc/logrotate.d/myFile

Alguma sugestão melhor para uma solução concreta?

    
por Saurabh 12.04.2018 / 19:32

1 resposta

1

Existem várias instâncias simultâneas de logrotate sendo executadas por tarefas agendadas em sua máquina. Não há bloqueio no arquivo de estado usado e, portanto, os diferentes logrotate jobs "pisam nos dedos uns dos outros" ao atualizá-lo.

Como você adicionou sua configuração myFile para logrotate no diretório /etc/logrotate.d , não é necessário rotacioná-los explicitamente em uma tarefa cron separada. A execução normal do job logrotate cron pegaria essa configuração automaticamente.

Se você precisar executar a rotação com mais frequência do que a rotação de log padrão do sistema, recomendo colocar a configuração myFile em outro lugar.

Para garantir que o seu trabalho de rotação não use o mesmo arquivo de estado (nas instâncias em que o trabalho de rotação pode ser executado ao mesmo tempo que o trabalho de rotação do log do sistema), use outro arquivo de estado:

/usr/sbin/logrotate -f -s /some/location/myFile.state /some/location/myFile

Observe que o job não precisa ser executado como root, a menos que os arquivos de log sejam de propriedade de root ou de algum usuário diferente de você. Em outras palavras, se os arquivos de log pertencerem a você, você poderá fazer a rotação em um cron job pessoal.

    
por 13.04.2018 / 11:53