Logrotate não funciona

17

Estou tentando fazer com que o logrotate funcione no meu VPS para girar meus arquivos do apache semanalmente. Atualmente, o conteúdo do arquivo de configuração apache2 é assim.

"/var/www/user/site.com/logs/*.log"   {
        weekly
        missingok
        rotate 8
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                /etc/init.d/apache2 reload > /dev/null
        endscript
}

Eu deixei por duas semanas e nada mudou até onde eu sei. Quando eu simulá-lo na linha de comando, recebo a seguinte saída.

user@geneva:/var/lib/logrotate$ /usr/sbin/logrotate -d /etc/logrotate.d/apache2
reading config file /etc/logrotate.d/apache2
reading config info for "/var/www/user/site.com/logs/*.log" 

Handling 1 logs

rotating pattern: "/var/www/user/site.com/logs/*.log"     weekly (8 rotations)
empty log files are not rotated, old logs are removed
considering log /var/www/user/site.com/logs/access.log
  log does not need rotating
considering log /var/www/user/site.com/logs/error.log
  log does not need rotating
not running postrotate script, since no logs were rotated

Alguma idéia do que a Iv'e configurou errado?

Meu arquivo de status está vazio também: (

user@geneva:~$ cat /var/lib/logrotate/status
logrotate state -- version 2

Atualizar

Eu apaguei o arquivo de status e fiz uma execução forçada do logrotate e agora os logs parecem ter sido girados e o arquivo de status parece mais promissor!

sudo rm /var/lib/logrotate/status

sudo /usr/sbin/logrotate -f /etc/logrotate.conf
    
por Malachi 10.05.2012 / 23:14

5 respostas

16

Acho que weekly significa que o logrotate quer ver pelo menos uma semana de entrada para o seu arquivo access.log para poder rotacioná-lo.

Assim, o problema parece ser que você não está armazenando a entrada de estado para acionar a rotação.

Aqui está um exemplo detalhado do caso simples, de como o logrotate decide rotacionar um arquivo de log.  (estes são caminhos do fedora, Ubuntu, Centos, etc. podem ser diferentes)

(Eu fiz algumas requisições para http://localhost , então existem algumas entradas no access_log, senão o logrotate nunca roda ...)

Então eu configurei meu logrotate para o apache para semanalmente assim;

/var/log/httpd/*log {
        weekly
...
}

e originalmente não há entrada no arquivo /var/lib/logrotate.status

# grep access_log /var/lib/logrotate.status
<- nothing

Então o logrotate não roda o arquivo access_log ;

 #  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd 
 ...
considering log /var/log/httpd/access_log
  log does not need rotating

No entanto, se eu rodar logrotate manualmente assim;

#  /usr/sbin/logrotate   /etc/logrotate.d/httpd 

agora há uma entrada no arquivo de estado para o httpd access_log;

 # grep access_log /var/lib/logrotate.status
 "/var/log/httpd/access_log" 2012-5-11

No entanto, o apache ainda não vai rodar o log, porque a entrada tem apenas 0 dias (2012-5-11);

  #  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd 
 considering log /var/log/httpd/access_log
   log does not need rotating

No entanto, se você editar o arquivo de status com vi vi /var/lib/logrotate.status , algo assim para definir a data para mais de uma semana ...;

 # grep access_log /var/lib/logrotate.status
 "/var/log/httpd/access_log" 2012-4-11    <---    more than a week ago..

Em seguida, o logrotate agora rotaciona corretamente o arquivo devido à data no arquivo de estado 2012-4-11 sendo mais de uma semana atrás a partir de hoje 2012-5-11

 #  /usr/sbin/logrotate  -d /etc/logrotate.d/httpd
 considering log /var/log/httpd/access_log
 log needs rotating           <---    logrotate rotates the file.

(lembre-se de que -d causa uma execução a seco, portanto, é útil apenas para inspeção, você precisa executar o comando sem -d para criar entradas de status ou girar arquivos, etc.)

    
por 10.05.2012 / 23:34
6
log does not need rotating

Isso pode ser porque seus arquivos de log estão vazios.
Essa situação pode acontecer porque o apache ainda grava em um arquivo de log anterior, que foi renomeado sem reiniciar o apache. Então access.log se tornou access.log.1 e o apache escreve nele.

Ou você tem um problema com o tempo de criação do registro:

ls -al --time=ctime /var/www/user/site.com/logs/
    
por 10.05.2012 / 23:36
4

Eu enfrentei o problema semelhante, exceto por nenhuma dessas respostas me ajudou. Meu arquivo de log era enorme e antigo, minha configuração era 100% ok e válida, remover o arquivo de status não ajudou.

Acabou que o problema estava em entradas logrotate duplicadas . Quando eu executo logrotate manualmente no meu arquivo de configuração apenas assim:

logrotate -df /etc/logrotate.d/my_service_name

não apresentou erros, apenas disse:

log does not need rotating

Eu ainda não sei porque, na verdade. Mas quando eu executo um comando logrotate completo assim:

logrotate -f /etc/logrotate.conf

Eu tenho a seguinte linha:

error: my_service_name:1 duplicate log entry for /var/log/nginx/my_service_name.access.log

Descobri que o arquivo de configuração logrotate do meu serviço continha as entradas para a rotação dos logs de acesso do nginx, bem como os próprios logs de serviço. E isso conflitou com o ngnix logrotate config, que tem uma regra para todas as entradas nginx:

# grep nginx /etc/logrotate.d/*
/etc/logrotate.d/nginx:/var/log/nginx/*.log {

Assim, a solução para o meu caso é bem simples: eu tinha que excluir a regra de rotação excluir conflitos nginx logs da minha configuração .

Suponho que o logrotate tenha começado a abortar o arquivo de processamento em conflitos de regras apenas a partir de uma das versões mais recentes. Eu recebo este erro com v.3.8.7 mas sob v.3.7.8 com a mesma configuração conflitante escreve o mesmo erro, mas gira bem. Embora eu não tenha encontrado nenhum registro disso no log de mudanças do logrotate.

    
por 12.01.2015 / 12:28
1

Tente executar sudo logrotate -f --verbose /etc/logrotate.d/apache2 Veja o que está escrito no console e corrija qualquer coisa que esteja errada.

    
por 16.02.2016 / 03:58
0

Eu tinha uma máquina Debian 7 que, após uma atualização do sistema, não rodava mais os logs de e-mail. Todos os outros registros, exceto os de correio, foram corretamente rotacionados. Eu descobri que os logs de e-mail tinham crescido vários gigabytes. Eu sempre gerenciei a rotação de log via Webmin. Em seguida, executando logrotate -d /etc/logrotate.conf , vi a seguinte mensagem:

Ignoring rsyslog.dpkg-old, because of .dpkg-old ending

Descobri que minhas entradas de rotação de e-mail estavam listadas em /etc/logrotate.d/rsyslog.dpkg-old , que foi ignorado! Renomeando o arquivo corrigido a rotação do arquivo de log: -)

    
por 01.05.2017 / 11:20

Tags