Ich habe eine Linux-Anwendung, die ständig Protokollinformationen in eine Protokolldatei schreibt, z. /var/log/application.log
. Da die Anwendung die Datei nicht automatisch dreht, kann diese Protokolldatei in einigen Wochen eine Größe von Gigabyte erreichen. Daher möchte ich diese Datei ordnungsgemäß drehen können
Mein Hauptanliegen hierbei ist, dass ich zum Drehen einer Datei, die von der Anwendung jederzeit geöffnet wird, wahrscheinlich Folgendes tun muss:
Verschieben Sie die Datei in ihre gedrehte Form
/var/log/application.log -> /var/log/application.log.2013-01-28
Erstellen Sie eine leere
/var/log/application.log
. Obs: Zu diesem Zeitpunkt schreibt der Bewerbungsprozess noch an/var/log/application.log.2013-01-28
Ändern Sie den Dateideskriptor des Anwendungsprozesses, um erneut darauf zu verweisen
/var/log/application.log
Also, habe ich recht? Wenn ja, wie kann ich das machen? (hauptsächlich das Ändern des Dateideskriptorteils)
Wenn nicht, was ist der richtige Weg und wie geht das?
dup2
den neuen Deskriptor über dem alten, dann den neuen Deskriptor schließen.)Antworten:
Schreiben Sie eine
logrotate
zu verwendende Konfigurationcopytruncate
quelle
Die meisten dieser Anwendungen reagieren auf ein Signal, z. B.
SIGHUP
, und schließen ihre Protokolldateien beim Empfang des Signals und öffnen sie erneut. Überprüfen Sie die Dokumentation Ihrer Anwendung auf das richtige zu sendende Signal.quelle