it-swarm.com.de

Logrotate: "Log muss nicht gedreht werden" warum?

Ich habe die folgende neue Logrotate-Konfiguration:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

Wenn ich logrotate -d nexus, Ich bekomme folgendes:

reading config file nexus
reading config info for /var/log/nexus/nexus.log

Handling 1 logs

rotating pattern: /var/log/nexus/nexus.log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
  log does not need rotating

Mein Ordner/var/log/nexus/enthält Folgendes:

nexus.log
oldlogs.tar.gz

Warum dreht LogRotate die Datei nexus.log nicht? Was ich erwartet hatte, war, dass die Datei nexus.log abgeschnitten worden wäre und eine neue Datei, so etwas wie nexus.log-201106241000, erstellt worden wäre.

60
Rich

Höchstwahrscheinlich ist die Protokolldatei weniger als einen Tag alt und/oder wurde innerhalb des letzten Tages gedreht, und logrotate merkt sich den Verlauf.

Wenn Sie -f Hinzufügen, wird eine Drehung erzwungen, wenn Sie dies wirklich möchten (obwohl Sie nicht 100% sicher sind, wie dies mit -d Interagiert).

Sie können sich den Verlauf ansehen. Der Standort hängt von Ihrer Verteilung ab, kann aber auch /var/lib/logrotate/status Sein. Diese Datei zeigt an, wann die Protokolle zuletzt gedreht wurden.

68
EightBitTony

Wenn Sie logrotate zum ersten Mal mit einer neuen Protokollkonfiguration ausführen, weiß es nicht, wann die letzte Protokollrotation stattgefunden hat, und schreibt einfach eine Statuszeile in /var/lib/logrotate/status dahingehend, dass es heute ausgeführt wurde.

Wenn es anschließend am nächsten Tag ausgeführt wird, erkennt es, dass das Protokoll einen Tag alt ist, und dreht es wie erwartet. Wenn Sie nicht warten möchten, bearbeiten Sie die Statusdatei von logrotate und setzen Sie das Statusdatum für Ihr Protokoll auf den vorherigen Tag zurück.

Wenn Sie logrotate manuell ausführen, funktioniert es wie erwartet

61
Tony Sweeney

Selbst wenn Sie logrotate manuell ausführen, funktioniert dies manchmal nicht, wenn Sie es am selben Tag ausführen und dateext haben, wobei der Standardwert keine Senconds enthält (z. B. -%Y%m%d). Nicht einmal, wenn Sie die Statusdatei von logrotate ändern oder die Größenanweisung verwenden (z. B. size 200M). Zumindest unter CentOS 6 kann logrotate Ihre Protokolldatei nicht drehen, da sie bereits vorhanden ist.

Um dies zu lösen, müssen Sie dateformat anstelle von dateext mit einem Wert wie: %Y%m%d%s.

Sehen man logrotate für mehr Informationen.

5
emerino

Passen Sie auf, dass Sie laufen

logrotate -vdf /etc/logrotate.conf

das Ereignis wird zwar nur simuliert, aber in /var/lib/logrotate.status protokolliert, und nachfolgende logrotate-Läufe antworten mit dem genannten

log does not need rotating
1
helvete