52 votes

Quand utiliser l'option delaycompress dans logrotate ?

La page de manuel de logrotate dit que :

It can be used when some program cannot be told to close its logfile
and  thus  might  continue writing to the previous log file for some
time.

Je ne comprends pas bien. Si l'on ne peut pas dire à un programme de fermer son fichier journal, il continuera d'écrire pour toujours pas pour parfois . Si la compression est reportée au cycle de rotation suivant, le programme continue d'écrire dans ce fichier même après le cycle de rotation suivant. Comment l'ajournement résout-il le problème ?

Je crois comprendre que copytruncate doit être utilisé lorsqu'il n'est pas possible de demander à un programme de fermer le fichier journal. Je suis conscient que certaines données écrites dans le fichier journal sont perdues lorsque la copie est en cours.

J'ai regardé le fichier logrotate pour couchdb, et il y avait à la fois copytruncate y delaycompress options.

/usr/local/couchdb-1.0.1/var/log/couchdb/*.log {
   weekly
   rotate 10
   copytruncate
   delaycompress
   compress
   notifempty
   missingok
}

Il semble qu'il soit inutile d'utiliser delaycompress quand copytruncate est déjà là. Que me manque-t-il ?

38voto

Ryan Sampson Points 2898

Votre compréhension de copytruncate est correcte, mais la formulation dans la page de manuel de delaycompress est un peu trompeuse. Il faudrait plutôt dire "lorsqu'on ne peut pas dire à un programme de immédiatement fermer son fichier journal" -- par exemple, si vous utilisez des scripts partagés et que le script envoie un signal au processus utilisant le journal lorsque tous les fichiers journaux ont été tournés.

5voto

Edwardg Points 41

Nous utilisons :

  • quotidien
  • délaicompression
  • nodateext

Ceci crée une copie fixe du fichier apache access_log access_log.1 afin que nous puissions exécuter notre paquet Stats en tant que script à la fin de la journée.

Le lendemain, logrotate compresse le fichier en créant access_log.2.zip

3voto

Chris Jacob Points 4211

Je ne suis pas sûr d'avoir bien compris votre question, mais si vous voulez savoir ce que j'en pense... j'utilise ceci :

postrotate
          killall -HUP syslog-ng
  endscript

C'est une bonne façon (ou du moins une façon) de tuer le journal et de passer au suivant. Pour les "programmes" qui craignent, comme la plateforme ASA de Cisco qui enregistre des tonnes de données par seconde, cela fonctionne.

0voto

lzap Points 2604

La raison en est que le logiciel effectue sa propre rotation. Cela se fait généralement en copiant le journal actuel dans un fichier nouvellement créé, puis en tronquant l'original. Cela peut prendre un certain temps et logrotate n'a pas de mécanisme pour signaler qu'un fichier est prêt à être compressé.

Logrotate peut être utilisé uniquement pour compresser et maintenir les archives plutôt que d'effectuer la rotation proprement dite.

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