Logrotate: "log muss nicht rotieren" warum?

57

Ich habe die folgende neue Logrotate-Konfiguration:

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

Wenn ich renne logrotate -d nexus, erhalte ich 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 / var / log / nexus / Ordner 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, etwa nexus.log-201106241000, erstellt worden wäre.

Reich
quelle
Denken Sie auch daran, dass bei Verwendung der Option -d die Protokolle nicht gedreht werden. Es zeigt Ihnen, was es tun WÜRDE, ohne die Option, wie ein Spielplan. Verursachte mir ernsthafte Kopfschmerzen, als ich dachte, ich könnte sie sich drehen sehen, und dann waren sie immer noch da.
Maxwell Flanders

Antworten:

64

Höchstwahrscheinlich ist die Protokolldatei weniger als einen Tag alt und / oder wurde am letzten Tag gedreht, und logrotate speichert den Verlauf.

Wenn Sie hinzufügen , -fwird es eine Drehung erzwingen , wenn Sie wirklich (wenn auch nicht 100% sicher , wie das in Wechselwirkung mit wollen -d).

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

EightBitTony
quelle
4
In FreeBSD ist es /var/run/logrotate.status
kaleissin
Überprüfen Sie auch, ob das Argument -s im Aufruf für den Speicherort der
Statusdatei verwendet
2
-d+ -fmacht logrotate Bericht "muss rotieren" für alle Dateien, auch diejenigen, die nicht übereinstimmen
Fluffy
Um dies hinzuzufügen, reicht es aus, das Datum in der Statusdatei so zu bearbeiten, dass es älter als die Rotationsrichtlinie ist, um zu überzeugen, logrotatedass das Protokoll rotiert werden muss, wenn es erneut ausgeführt wird.
Centimane
Unter CentOS habe ich /var/lib/logrotate.status geändert, damit Logrotate funktioniert. Wie von EightBitTony angegeben, speichert die tägliche Logrotate die Historie. Wenn sich die Datei nicht bereits mit einem Datum in der Vergangenheit im Verlauf befindet, wird die Datei durch logrotate nicht gedreht.
Mark
58

Wenn Sie logrotate zum ersten Mal mit einer neuen Protokollkonfiguration ausführen, ist nicht bekannt, wann die letzte Protokollrotation stattgefunden hat. Daher wird nur eine Statuszeile /var/lib/logrotate/statusmit dem Effekt geschrieben, der heute ausgeführt wurde.

Wenn es anschließend am folgenden 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

Tony Sweeney
quelle
5

Selbst wenn Sie logrotate manuell ausführen, funktioniert dies manchmal nicht, wenn Sie es am selben Tag dateextausführen und der Standardwert keine Sekunden enthält (z -%Y%m%d. B. ). Nicht einmal, wenn Sie die Statusdatei von logrotate ändern oder eine Größenanweisung verwenden (zB 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 dateformatanstelle von dateexteinen Wert wie: verwenden %Y%m%d%s.

Siehe man logrotatefür weitere Informationen.

emerino
quelle
1

Pass auf, dass du rennst

logrotate -vdf /etc/logrotate.conf

Das Ereignis, obwohl nur simuliert, wird protokolliert, /var/lib/logrotate.status und nachfolgende Logrotate-Läufe antworten mit dem genannten

log does not need rotating
helvete
quelle
1
Ich kann das auf Ubuntu (16.04 und 17.04) nicht reproduzieren. Wenn "/var/lib/logrotate.status" verwendet wird, muss eine andere Distribution verwendet werden. Ubuntu meldet sich unter "/ var / lib / logrotate / status" an.
Philipp Claßen
2
@Philipp Claßen: Sie haben Recht, dass dies (Statusdatei abgelegt unter /var/lib/logrotate.status) beim Debuggen der Konfiguration von Logrotate 3.10 unter Alpine Linux 3.5 in einem Docker-Container beobachtet wurde. Aber es gibt kein Ubuntu-Flag in der Fragendefinition, oder?
Helvete
1
Ja es ist in Ordnung. Ich würde es nur erwähnen, weil Ubuntu so beliebt ist. Ich gehe davon aus, dass viele Leute diese Frage lesen, weil sie ihren Server reparieren wollen, der heute oft mit Ubuntu läuft.
Philipp Claßen
1
OK, das stimmt. Um vollständig sein kann ich hinzufügen , dass die locationo der Statusdatei auf Centos 7 Distro ist/var/lib/logrotate/logrotate.status
Helvete