Logrotate executando de acordo com o cron, mas os logs não são rotacionados

1

Eu corro logrotate através do cron com o script

[alex@leia ~]$ cat /etc/cron.daily/logrotate
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

que, de acordo com o syslog, deve funcionar:

Dec 14 03:21:01 leia run-parts(/etc/cron.daily)[3041]: starting logrotate
Dec 14 03:21:01 leia run-parts(/etc/cron.daily)[3063]: finished logrotate

Espero que isso também execute a seguinte diretiva:

[alex@leia ~]$ cat /etc/logrotate.d/www-data_uwsgi_nginx
/home/www-data/*/logs/*/*log {
    rotate 5
    size 20M
    nocompress
    missingok
    postrotate
        touch /tmp/uwsgi-reload
        [ ! -f /var/run/nginx.pid ] || kill -USR1 'cat /var/run/nginx.pid'
    endscript
    sharedscripts
}

Mas! Ele não gira os logs em /home/www-data . Outros registros são rotacionados. Se eu executar logrotate manualmente com

[alex@leia ~]$ sudo logrotate /etc/logrotate.conf

faz rodar os logs em questão.

Eu vi a questão relacionada onde o problema estava com o SELinux , e tentei essa solução, mas isso não ajudou na minha caso.

Editar: a pedido, o conteúdo de /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.
    
por kqr 15.12.2015 / 10:49

1 resposta

2

Eu pedi ajuda em #centos, e parece que o SELinux era o problema. De acordo com aureport -a , o SELinux negou que o processo rodando sob o acesso logrotate_t context aos arquivos no diretório home, que tinha o user_home_t label - não é realmente uma grande surpresa uma vez que você saiba como o SELinux funciona!

Eu decidi apenas reclassificar os diretórios para os arquivos de log (o .* à direita torna a modificação recursiva):

# semanage fcontext -a -t var_log_t "/home/www-data/.*/logs/.*"
# restorecon -r /home/www-data/*/logs

Eu escolhi o rótulo var_log_t porque isso meio que faz sentido e acontece de ser um que eu sei que deveria funcionar. Eu gostaria de usar um rótulo que faça mais sentido, mas não sei listar os que estão funcionando. Pode ser possível criar uma nova política, mas isso pareceu ser um exagero para meus propósitos.

Vou ter que esperar alguns dias e depois ver se funcionou, mas suspeito que vai funcionar!

Edit: funcionou como um encanto! Estou tão feliz agora.

    
por 11.01.2016 / 12:26