2014-03-05 8 views
10

Nach der Ausführung von logrotate schreibt meine App weiter zu my_app.log.1 (das alte Protokoll, das später archiviert werden sollte) anstelle von my_app.log.App schreibt in ".log.1" -Datei statt ".log" -Datei nach dem Ausführen von logrotate

Dies macht my_app.log eine leere Datei, daher logrotate läuft ohne Wirkung. Und my_app.log.1 weiter auf Gigabyte wachsen.

Ich benutze Ubuntu 12.04. Meine App ist eine Node.js-App, die pm2 verwendet. Folgende ist meine logrotate Konfiguration:

"/var/log/my_app/*.log" { 
    daily 
    size 50M 
    rotate 10 
    missingok 
    compress 
    delaycompress 
    notifempty 
} 

Ich weiß, ich notifempty dort setzen, aber warum ist my_app.log.1 in erster Linie geschrieben?

+0

Wenn die Anwendung die Protokolldatei während der Ausführung geöffnet hält, wirkt sich dies nicht auf den geänderten Dateinamen aus. Es schreibt weiter in die Datei. 'logrotate' kann konfiguriert werden (in einem 'Postrotate'-Skript), um die Anwendung neu zu starten (oder ein' HUP'-Signal zu senden, wenn die Anwendung darauf reagiert), nachdem sie die Dateien umbenannt hat. Es gibt Beispiele in der Dokumentation. – axiac

Antwort

16

Ich fand schließlich heraus, wie man das Problem löst.

Dies lag daran, dass die Protokolldatei von pm2 geschrieben wurde. logrotate änderte seinen Namen in my_app.log.1 und erstellte neue my_app.log Datei, aber pm2 kümmerte sich nicht darum und schrieb weiter an my_app.log.1.

Ich löste das Problem durch Ersetzen der notifempty Option durch copytruncate und dann neu gestartet pm2. Nach der Fixierung kann notifempty hinzugefügt werden, aber ich brauche es nicht wirklich.

Weitere Informationen finden Sie unter logrotate reference. Hoffe, das wird anderen Leuten helfen, ein ähnliches Problem zu bekommen.