Quand utiliser l'option delaycompress dans logrotate?

33

La page de manuel de logrotatedit 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 ceci. S'il est impossible de dire à un programme de fermer son fichier journal, il continuera à écrire pour toujours , pas pendant un certain temps . Si la compression est reportée au cycle de rotation suivant, le programme continue à écrire dans ce fichier, même après le cycle de rotation suivant. Comment remettre à plus tard le problème?

Je crois comprendre que cela copytruncatedevrait ê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 à la fois copytruncateet les delaycompressoptions.

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

Il semble qu'il ne sert à rien d'utiliser delaycompressquand copytruncateexiste déjà. Qu'est-ce que je rate?

Anand Chitipothu
la source

Réponses:

27

Votre compréhension de copytruncateest correcte, mais le libellé de la page de manuel delaycompressest un peu trompeur. Plus correctement, il devrait indiquer "lorsqu'un programme ne peut pas être informé qu'il ferme immédiatement son fichier journal" - par exemple, si vous utilisez des scripts sharedscripts et que le script envoie un signal au processus à l'aide du journal lorsque tous les fichiers journaux ont été pivotés. .

femme
la source
1
Lorsque je l'utilise copytruncate, il n'est pas nécessaire d'indiquer au programme de fermer son fichier journal. Donc, est-il inutile de préciser delaycompressavec copytruncate?
Anand Chitipothu
6
N'utilisez jamais copytruncatesauf si vous devez absolument , car il perd les entrées du journal. Vous pouvez utiliser les deux options si vous souhaitez utiliser l’autre fonctionnalité proposée, delaycompressà savoir la possibilité de lire le fichier journal précédent sans avoir à le décompresser au préalable.
womble
Existe-t-il une option autre que copytruncatesi je ne peux pas dire à mon programme de recharger?
Anand Chitipothu
5
Non, c’est la raison pour laquelle vous devriez utiliser un logiciel qui ne craint pas et qui accepte un signal disant «rechargez vos journaux».
womble
3

Je ne suis pas sûr de bien comprendre votre question, mais si vous demandez ce que je pense ... j'utilise ceci:

postrotate
          killall -HUP syslog-ng
  endscript

C'est un bon (ou au moins un moyen) de tuer le journal et de passer au suivant. Cela fonctionne pour les "programmes" qui craignent, tels que la plate-forme ASA de Cisco qui enregistre des tonnes de données par seconde.

Garenne
la source
3

Nous utilisons:

  • du quotidien
  • retarder la compression
  • nodateext

Cela crée une copie fixe d'Apache access_log access_log.1afin que nous puissions ensuite exécuter notre paquet Stats sous forme de script à la fin de la journée.

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

Edwardg
la source