Logrotate: execute a cada N horas

2

Considere um servidor que gera logs extensos, que são arquivados usando logrotate e bz2:

"/var/log/uwsgi/*/*.log" {
  copytruncate
  daily
  rotate 14
  compress
  delaycompress
  missingok
  notifempty
  compresscmd /bin/bzip2
  uncompresscmd /bin/bunzip2
  compressext .bz2
}

Usar a rotação hourly não é conveniente para a inspeção de registro em tempo real (os problemas tendem a acontecer apenas quando a hora muda), e a daily de rotação obtém o disco completo com frequência.

Existe uma maneira de definir o logrotate para rodar a cada determinada quantidade de horas? Uma invocação a cada 6 horas seria perfeita para o meu caso.

    
por Adam Matan 12.11.2014 / 06:36

1 resposta

2

A execução do logrotate commad com -f em um cronjob pode ser suficiente. De man logrotate :

-f, --force
      Tells logrotate to force the rotation, even if it doesn't  think
      this  is  necessary.   Sometimes this is useful after adding new
      entries to a logrotate config file, or if  old  log  files  have
      been  removed  by  hand,  as  the new files will be created, and
      logging will continue correctly.

Portanto, edite /etc/crontab e adicione:

30 */6 * * * root logrotate -f /etc/logrotate.conf

Altere o minuto para atender às suas necessidades. O */6 significa que ele deve ser executado a cada seis horas.

Isso rotacionará todos os arquivos log , portanto, isole as configurações do aplicativo para um arquivo de configuração (independente) e use-o como o parâmetro. Por exemplo, crie /etc/logrotate.d/uwsgi , contendo:

"/var/log/uwsgi/*/*.log" {
  copytruncate
  daily
  rotate 14
  compress
  delaycompress
  missingok
  notifempty
  compresscmd /bin/bzip2
  uncompresscmd /bin/bunzip2
  compressext .bz2
}

junto com outras linhas em /etc/logrotate.conf nas quais você pode estar implicitamente dependendo. Em seguida, a entrada crontab será semelhante a:

30 */6 * * * root logrotate -f /etc/logrotate.d/uwsgi
    
por muru 12.11.2014 / 06:42