Eu tenho CentOS 7.4 com logrotate 3.8.6 instalado. Eu tenho um arquivo logrotate personalizado /etc/logrotate.d/
para girar alguns logs em um Tomcat (por exemplo, catalina.out) que está instalado na mesma máquina.
/opt/test/apache-tomcat-8.5.15-client/logs/catalina.out {
copytruncate
daily
rotate 30
olddir /opt/test/apache-tomcat-8.5.15-client/logs/backup
compress
missingok
maxsize 50M
dateext
dateformat .%Y-%m-%d
}
Quero que o log seja rodado diariamente ou se o tamanho chegar a 50MB. Quando isso acontece, os arquivos de log são compactados e copiados para uma pasta de backup e são mantidos por 30 dias antes de serem excluídos.
Eu já executei o logrotate manualmente no modo de depuração com o seguinte comando e nenhum erro foi exibido (e os arquivos de log compactados esperados foram criados):
/usr/sbin/logrotate -d /etc/logrotate.d/openncp-tomcat-backoffice 2> /tmp/logrotate.debug
Em /var/lib/logrotate/logrotate.status
não há problemas, os arquivos são mostrados como girados, mas não são de fato:
"/var/log/yum.log" 2017-11-27-19:0:0
"/opt/test/apache-tomcat-8.5.15-server/logs/catalina.out" 2017-12-15-3:41:1
"/var/log/boot.log" 2017-12-15-3:41:1
"/var/log/up2date" 2017-11-27-19:0:0
Eu tenho o padrão /etc/logrotate.conf
:
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
Eu também tenho o padrão /etc/cron.daily/logrotate
:
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
De acordo com a página de manual logrotate :
maxsize size
Log files are rotated when they grow bigger than size bytes even before the additionally specified time interval ( daily, weekly, monthly, or yearly). The related size option is similar except that it is mutually exclusive with the time interval options, and it causes log files to be rotated without regard for the last rotation time. When maxsize is used, both the size and timestamp of a log file are considered.
Percebi que até agora os logs não chegaram a 50MB, e já se passaram vários dias sem nenhuma rotação.
Peço sua orientação sobre como configurar isso adequadamente.
O problema estava relacionado ao tipo de arquivo SELinux dos arquivos de log, que estavam localizados em um diretório diferente de /var/log, fazendo com que o processo logrotate não tivesse acesso para realizar suas tarefas. Encontrei este outro tópico do SO , bem como esta página do Redhat, que ajudou a resolver o problema. Achei a documentação do Redhat muito útil, então forneço aqui 2 links: