Gemessen an den Zeitstempeln auf meinen Systemen führt logrotate seine tägliche Protokollrotation durch, wenn logrotate von cron ausgeführt wird. Wenn ich es jedoch früher ausführe, werden die Dateien nicht gedreht. Woher weiß logrotate, ob sie gedreht werden sollen oder nicht, ob sie einen Verlauf führen oder ob sie möglicherweise Zeitstempel verwenden?
Ich glaube, es ist der Inhalt der Statusdatei, was mein Fall ist /var/lib/logrotate.status. Jede Datei hat eine Zeile. Dies ist das Datum, an dem sie zuletzt gedreht wurde. Wenn Sie logrotate an einem Datum ausführen, an dem eine bestimmte Datei gedreht werden soll, wird die Datei gedreht, wenn die Anzahl der Tage zwischen dem aktuellen Datum und dem Datum in der Datei (1 für täglich, 7 für wöchentlich usw.) angegeben ist.
logrotate scheint sich nicht darum zu kümmern, zu welcher Tageszeit es ausgeführt wird; Selbst wenn es normalerweise um 2355 ausgeführt wird und Sie es stattdessen um 0130 ausführen, werden die täglich markierten und gestern zuletzt ausgeführten Dateien weiterhin gedreht. Andernfalls würde das heutige Datum in die Statusdatei (gegen alle gedrehten Dateien) verschoben, sodass ein zweiter Durchlauf bei 2355 nichts bewirken würde.
Hmm .. also es dreht sich nur wenn: aktuelles datum> datum in /var/lib/logrotate/status(wie die datei in meinem fall ist).
Kyle Brandt
2
Ich denke, es macht überhaupt nichts, wenn 24 Stunden seit dem letzten Durchlauf vergangen sind, was durch Untersuchen der m-Zeit der Zustandsdatei herausgefunden wird. Sobald entschieden wurde, dass ein ganzer Tag vergangen ist und alles rechtmäßig geschehen darf, werden TÄGLICH, WÖCHENTLICH usw. Entscheidungen basierend auf den Datumsfeldern in der Datei getroffen.
MadHatter unterstützt Monica
4
Nun, es scheint das Datum in dieser Datei zu verwenden. Ich habe den Tag eines Tages in die Statusdatei zurückgesetzt und sie ausgeführt ... sie hat sich gedreht ...
Kyle Brandt,
Ich bin gerade zurückgegangen und habe meine Logrotate angestupst. Ich glaube, ich habe mich geirrt und was du oben schreibst, ist richtig. Es entscheidet anhand des Zeitstempels der Statusdatei, ob sie bereits heute ausgeführt wurde. Ist dies nicht der Fall, werden die Daten der letzten Rotation aus der Statusdatei extrahiert und entsprechend verfahren. Ich habe nur gelogen, um mit vi zu logrotieren und -t zu berühren, um davon zu überzeugen, dass es gestern um 2355 lief, als es meine Munin-Logs drehte. Wenn Sie es erneut ausführen, obwohl es weniger als 24 Stunden her ist, wurden sie herausgedreht und die Statusdatei entsprechend aktualisiert.
MadHatter unterstützt Monica
Ich habe meine Antwort aufgrund der Tests, die ich gerade durchgeführt habe, auf den aktuellen Stand gebracht (achtmal ab Sonntag meine Munin-Protokolle aufschneiden, aber wen interessiert das schon!).
MadHatter unterstützt Monica
11
Aus der Manpage von logrotate:
Normalerweise wird Logrotate als täglicher Cron-Job ausgeführt. Es wird ein Protokoll nicht mehr als einmal an einem Tag geändert, es sei denn, das Kriterium für dieses Protokoll basiert auf der Größe des Protokolls und die Log-Geschwindigkeit werden mehr als einmal pro Tag ausgeführt oder es wird die Option -f oder -force verwendet.
/var/lib/logrotate/status
(wie die datei in meinem fall ist).Aus der Manpage von logrotate:
quelle