Como faço para girar meus logs apesar de ter processos em execução?

0

Estou executando o Ubuntu 14.04. Eu tenho esse projeto Rails e meus logs estão explodindo fora do controle de tamanho ...

myuser@myapp:~$ ls -al /home/rails/myapp/log/
total 3118220
drwxr-xr-x  2 rails rails       4096 Jul  3 22:31 .
drwxr-xr-x 15 rails rails       4096 Sep 21 17:21 ..
-rw-rw-r--  1 rails rails          0 Jun 22 10:22 development.log
-rw-rw-r--  1 rails rails      14960 Jun  1 22:39 development.log.1
-rw-rw-r--  1 rails rails          0 Oct 22  2016 .keep
-rw-r--r--  1 rails rails  178464887 Oct 11 10:00 production.log
-rw-r--r--  1 rails rails    8615654 Jul  3 22:31 production.log.1
-rw-r--r--  1 rails rails  640621243 Jun 29 13:16 production.log.2.gz
-rw-rw-r--  1 rails rails 2016391330 Oct 11 10:09 sidekiq.log
-rw-rw-r--  1 rails rails  348853619 Jul  3 22:31 sidekiq.log.1
-rw-rw-r--  1 rails rails          0 Jul  3 22:31 test.log
-rw-rw-r--  1 rails rails      54246 Jul  3 22:31 test.log.1

Eu configurei esta regra de rotação de log ... l

myuser@myapp:~$ cat /etc/logrotate.d/myapp
/home/rails/myapp/log/*.log {
    daily
    missingok
    compress
    notifempty
    rotate 12
    create
    delaycompress
    missingok
    su rails rails
    postrotate
        pkill -USR1 -u rails unicorn
    endscript
}

E ainda assim as coisas ainda não estão girando, apesar de eu incluir o comando "skill". Tem sido teorizado que as coisas não estão girando porque há processos em execução, por exemplo, o abaixo

myuser@myapp:~$ ps -elf | grep sidekiq
1 S rails    23864     1  1  80   0 - 254353 -     Oct10 ?        00:10:49 sidekiq 5.0.0 myapp [1 of 1 busy]

Gostaria de saber como girar meus logs, apesar dos processos em execução. Se esse não é o problema, gostaria de ter os logs girando.

    
por Dave 11.10.2017 / 16:21

2 respostas

1

O processo em execução provavelmente evita que os logs sejam rotacionados. Você tem duas opções. Reinicie o processo (sidekiq) na seção postrotate ou use a opção copytruncate para truncar o arquivo original no local em vez de excluí-lo.

    
por mniess 21.10.2017 / 19:54
0

Você tem várias opções.

  • Tente girar os logs dentro do seu projeto Ruby usando as bibliotecas padrão. Isso minimiza a perda de dados que acontece em outras opções.
  • Por algum motivo, se não for possível, use a diretiva copytruncate no logrotate config. Isso funcionará somente se o arquivo de registro for aberto com o sinalizador O_APPEND .
  • Se nenhum dos itens acima funcionar, na seção postrotate, reinicie o processo ou passe um signal para o seu script que irá lidar com a reabertura de arquivos de log (para que você não precise reiniciar o processo)
por mac 23.10.2017 / 13:02