2 votes

Logrotate ne semble pas fonctionner comme prévu

Voici ma configuration de rotation des logs pour /var/log/messages.

/var/log/messages
{
    rotate 4
    size 100M
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
    postrotate
    ifconfig eth0 | grep 'Device not found' &>/dev/null
    if [ $? != 0 ]; then
      kill -HUP $(cat /var/run/rsyslog.pid) > /dev/null
    else
      kill -HUP $(cat /var/run/rsyslog_1.pid) > /dev/null
    fi
    endscript
}

Je me suis retrouvé dans une situation où logrotate a créé messages.1 où mes logs précédents sont copiés et rsyslog continue d'écrire dans messages.1 (peut-être à cause de delaycompress). Maintenant, le fichier messages est créé à nouveau lors de la rotation des logs et sa taille est de zéro.

Comme j'ai beaucoup de logs activés pour mon application et que rsyslog continue d'écrire dans messages.1, celui-ci est devenu supérieur à 3 Go tandis que le fichier messages est à zéro.

Y a-t-il une erreur dans ma configuration ou dois-je activer/désactiver certaines fonctionnalités de logrotate pour ne jamais me retrouver dans ce type de situation ?

# logrotate --version 
logrotate 3.8.7

1voto

AJ HDD Points 41

Essayez manuellement si une telle commande que vous utilisez recharge réellement rsyslog. Testez-le en renommant messages en messages.x et en touchant messages plus chmod/chown à les mêmes autorisations que messages initialement, puis exécutez cette commande kill, voyez si rsyslog démarre réellement en utilisant le nouveau fichier. Sinon, peut-être quelque chose ne va pas avec cette commande. Le pid est-il correct dans ce fichier pid ? Le fichier pid est-il présent du tout ?

Quoi qu'il en soit, quelques-unes de plus à essayer, Debian utilise ces commandes par exemple :

systemctl kill -s HUP rsyslog.service
invoke-rc.d rsyslog rotate

Et bien sûr, pour déboguer logrotate, il y a

logrotate -vf /etc/logrotate.conf

qui pourrait éventuellement indiquer certains problèmes avec la configuration de logrotate.

En fin de compte, il y a une sorte de débogage simple, pour voir ce qui est exécuté :

...
postrotate
echo "avant ifconfig" >> /tmp/logrotate.debug
ifconfig eth0 | grep 'Device not found' &>/dev/null
echo "après ifconfig" >> /tmp/logrotate.debug
if [ $? != 0 ]; then
  echo "à l'intérieur de l'if" >> /tmp/logrotate.debug
  kill -HUP $(cat /var/run/rsyslog.pid) > /dev/null
else
  echo "à l'intérieur de l'else" >> /tmp/logrotate.debug
  kill -HUP $(cat /var/run/rsyslog_1.pid) > /dev/null
fi
echo "à la fin du script" >> /tmp/logrotate.debug
endscript
...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X