logrotate não girará meus logs automaticamente

8

Eu tenho duas caixas Debian diferentes (i386 x AMD) e tenho o mesmo problema. logrotate não rodará meus logs automaticamente. Funciona bem quando eu forçá-lo manualmente como

/usr/sbin/logrotate -f /etc/logrotate.conf

mas não está bem para mim.

As configurações não foram modificadas (pelo menos eu não as modifiquei), a caixa AMD é uma instalação nova e ainda não faz o seu trabalho.

Se você notou um problema semelhante, por favor me ajude.

Atualização (alguma saída do servidor):

logrotate -d http://pastebin.com/e6AshtGq

ls -l /var/log http://pastebin.com/Y2A4Li59

cat /etc/logrotate.conf http://pastebin.com/1h7Uwctr

ls -l /etc/logrotate.d http://pastebin.com/NvUAeszM

fabrik
fonte
Você tem algum tipo de erro? Verifique se "include /etc/logrotate.d" não está comentado.
Torian
1
Como você sabe que não vai girar seus logs? Erros? Não acontece depois de 30 dias? Essas caixas estão abertas o tempo todo? O logrotate está agendado no cron?
EightBitTony
Posso verificar se "include /etc/logrotate.d" existe nos dois sistemas. Sem erros, exceto alguma entrada interessante no syslog, como ...rsyslogd was HUPed...não ter certeza sobre isso significa alguma coisa.
precisa saber é o seguinte
@EightBitTony Estes são servidores, para que estejam em funcionamento continuamente. As configurações são mais ou menos os padrões (a configuração do logrotate não foi modificada por mim), apenas o material usual instalado. O logrotate está incluído, cron.dailymas a rotação não acontece.
precisa saber é o seguinte
@Fabrik favor adicionar saída /etc/logrotate.conf -d logrotate para a pergunta
EightBitTony

Respostas:

8

Verifique se o seu logrotate está sendo executado pelo cron.

Editar:

Na discussão do comentário - parece que o cron não está funcionando corretamente. Eu tinha um cronjob no meu crontab sem usuário, mas isso só veio à tona quando reiniciei o daemon cron

Meus sistemas ubuntu e centos têm um /etc/cron.daily/logrotatearquivo cujo conteúdo é

#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

Meu / etc / crontab possui a seguinte linha para executar as tarefas diárias

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily 
Iain
fonte
Isto é totalmente parecido com a minha configuração, exceto o fato de que o meu não está funcionando :( #
22411
O cron running verifica a saída de ps -ef | grep cron| grep -v grep? Adicione um eco ao início do /etc/cron.daily/logrotate echo "logrotate runing" >>/tmp/logrotate.oute veja se ele é criado.
user9517
Parece que algo deu errado com meu crontab. cronestá instalado e funcionando, mas não executa o trabalho diário de rotação de log. Se eu executar /etc/cron.daily/logrotatemanualmente, ele gira meus logs, /tmp/logrotate.outtambém gravados.
precisa saber é o seguinte
Não esqueça que o trabalho diário não será executado novamente até amanhã!
precisa saber é o seguinte
é claro, mas ontem eu modifiquei, /etc/cron.daily/logrotateentão eu adicionei um -fparâmetro para forçar a rotação ainda hoje de manhã meus logs não foram girados.
precisa saber é o seguinte
10

Eu tive um problema semelhante, mas crontabestava funcionando e para alguns diretórios de log logrotatefuncionou, mas para alguns não funcionou. Quando tentei executar o logrotate manualmente, recebi algumas mensagens de erro.

user@server:/var/log/apache2$ sudo /usr/sbin/logrotate -f /etc/logrotate.conf
error: error creating output file /var/log/apache2/access.log.1.gz: File exists
error: error creating output file /var/log/apache2/error.log.1.gz: File exists
...

Todos os *.1.gzarquivos tinham um tamanho 0. Excluí manualmente todos os arquivos mencionados na mensagem de erro, executei sudo /usr/sbin/logrotate -f /etc/logrotate.confnovamente e funcionou.

Eu também deveria compartilhar essa solução alternativa aqui, pois esse foi o primeiro resultado de pesquisa que surgiu quando eu estava pesquisando o problema, mas a solução sugerida não funcionou para mim. Talvez isso ajude também outras pessoas que estão na mesma situação que eu.

Frog23
fonte
obrigado, tive esse problema também. Excluiu todos os arquivos 1.gz e finalmente voltou a funcionar. que pedaço horrível de código.
Florian Heigl
2

Eu sei eu sei. Fio de 5 anos.

Apenas pensei que, se ainda aparecer bastante alto nas pesquisas, contribuirei e darei a minha solução para o problema que encontrei. Minhas tarefas de rotação de log não foram tratadas automaticamente em um dos meus servidores. Forçar a rotação funcionou bem. Encontrei uma solução depois de executar manualmente o comando de rotação diária:

( cd / && run-parts --report /etc/cron.daily )

Então vi o erro que impedia o logro de disparar trabalhos:

/etc/cron.daily/logrotate:
error: iptraf-ng:2 duplicate log entry for /var/log/iptraf/*.log

Sim, simples assim. Eu tinha dois arquivos definindo os mesmos logs para rotacionar (iptraf e iptraf-ng). A remoção de uma das definições conflitantes de rotação do log para o iptraf foi suficiente.

rm /etc/logrotate.d/iptraf

Outro problema pode ser um arquivo / etc / crontab danificado. Ou seja, verifique dupla ou triplamente a sintaxe nesse arquivo, pois ele não fornece nenhuma saída que eu possa encontrar se a sintaxe estiver incorreta. Sai silenciosamente após falha na validação da sintaxe.

Espero que isso economize tempo para alguém.

Sorriso pretensioso
fonte
1

OK, eu tive um problema semelhante.

"logs não estão sendo girados?" mas executando logrotate manualmente (ou executando /etc/cron.dailyoe ele os rotaciona perfeitamente).

Parece que o cron "não está sendo executado" diariamente. Ímpar. Então, procurei no arquivo de log em que o cron gera seus dados e vi "O token de autenticação não é mais válido; é necessário um novo" para corrigir esse problema específico, veja aqui

rogerdpack
fonte
1

Eu já vi isso acontecer com o tempo, à medida que os serviços mudam, e as opções usadas na rotação do log foram redigidas, causando falha na rotação do log todos os dias.

Para se ter uma idéia, a última correção envolveu a opção notifyempty no arquivo de logrotate do apache não sendo mais válido, fazendo com que o logrotate parasse completamente.

Embora isso tenha sido abordado até certo ponto, gostaria de compartilhar o processo que passo ao rastrear esses problemas:

  1. comece executando #/usr/sbin/logrotate -f /etc/logrotate.confpara procurar erros (por exemplo, postfix: 3 'missingok'.)
    O número do arquivo e da linha a que se refere é o arquivo na pasta logrotate.d.
  2. Edite o arquivo em questão # vi /etc/logrotate.d/postfix:, remova a opção que está causando o problema e salve o arquivo.
  3. Repita a primeira etapa para verificar se a rotação funciona ou se há outros problemas.

Há momentos em que o primeiro passo simplesmente produz algo, mas você sabe que há um problema. Como tudo começou porque os arquivos de log de um serviço não estavam sendo rotacionados, você pode assistir ao processo de rotação do log procurando esse serviço específico para ver o que está impedindo a rotação. Para fazer isso, adicione a tag detalhada ao seu comando logrotate e observe o que acontece nessa pasta (se houver).

DBrown
fonte
1

Verifique se há parâmetros de configuração de rotação de log conflitantes !!

Eu estava lutando com esse problema e finalmente li bastante a documentação do logrotate, encontrei aqui uma documentação útil .

Eu havia especificado um parâmetro Size e um parâmetro Rotation Interval , quando na verdade não queria nenhum. Eu queria que minhas rotações ocorressem exatamente quando elas foram agendadas no cron.

  1. O parâmetro Size substituirá qualquer intervalo de rotação. Portanto, meus logs precisavam exceder esse parâmetro antes que eles fossem rotacionados. (Posso ver como isso seria útil quando você estava mais preocupado com o uso do disco. Mas não era assim que eu queria usá-lo.)
  2. O intervalo de rotação verificará quando a última rotação ocorreu e garantirá que a próxima rotação seja atrasada pela quantidade especificada. Porém, não sei como você controla quando esse horário ocorre, ele se baseia na última vez que uma rotação aconteceu.

Portanto, livre-se do parâmetro Rotation Interval and Size . Então você terá uma rotação toda vez que o logrotate for chamado sem precisar forçá-lo.

EDIT : OK, mesmo isso não funciona totalmente! Se o arquivo de log estiver abaixo de um determinado limite, os logs não serão rotacionados. Portanto, quando eu executava um trabalho cron que girava a cada 2 minutos, ele não girava os logs.

Você pode ver informações detalhadas sobre depuração se executar logrotate -d. Isso fornece algumas informações de depuração muito úteis.

BruceJo
fonte