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.


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.


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


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.


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.