web-dev-qa-db-fra.com

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 suis confus par cela. Si un programme ne peut pas être invité à fermer son fichier journal, il continuera à é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 reporter la résolution du problème?

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

Je regardais le fichier logrotate pour couchdb, et il avait les options copytruncate et delaycompress.

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

Il semble inutile d'utiliser delaycompress lorsque copytruncate est déjà là. Qu'est-ce que je rate?

36
Anand Chitipothu

Votre compréhension de copytruncate est correcte, mais le libellé de la page de manuel de delaycompress est un peu trompeur. Plus correctement, il devrait indiquer "lorsqu'un programme ne peut pas être invité à immédiatement fermer son fichier journal" - par exemple, si vous utilisez des scripts partagés et que le script envoie un signal au processus en utilisant le journal lorsque tous les fichiers journaux ont été tournés.

30
womble

Nous utilisons:

  • du quotidien
  • délai de compression
  • nodateext

Cela crée une copie fixe de l'Apache access_logaccess_log.1 afin que nous puissions ensuite exécuter notre package Stats en tant que script à la fin de la journée.

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

3
Edwardg

Je ne sais pas si je comprends parfaitement votre question, mais si vous demandez ce que je pense ... J'utilise ceci:

postrotate
          killall -HUP syslog-ng
  endscript

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

3
Warren