Frage Wie behandelt logrotate "täglich" genau?


Gemessen an den Zeitstempeln auf meinen Systemen führt logrotate seine tägliche Log-Rotation durch, wenn logrotate von cron ausgeführt wird. Wenn ich es jedoch früher ausführe, dreht es die Dateien nicht. Woher weiß logrotate, ob er sie rotieren sollte oder nicht, ob er eine Historie behält oder Zeitstempel verwendet?


27
2017-11-04 14:03


Ursprung




Antworten:


Ich glaube, es ist der Inhalt der Staatsakte, was mein Fall ist /var/lib/logrotate.status. Jede Datei hat eine Zeile, das ist das Datum, an dem sie zuletzt gedreht wurde. Wenn Sie logrotate an einem solchen Datum ausführen, dass eine bestimmte Datei zur Rotation fällig ist, wird die Datei rotiert, 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 wird.

Logrotate scheint sich nicht darum zu kümmern, zu welcher Tageszeit es läuft; Selbst wenn es normalerweise um 23:55 Uhr läuft, wenn Sie es stattdessen um 01:30 Uhr ausführen würden, würde es immer noch die Dateien markieren, die täglich markiert und zuletzt gestern erledigt wurden; aber nachdem dies geschehen ist, würde es das heutige Datum in die Statusdatei (gegen irgendwelche rotierten Dateien) setzen, so dass ein zweiter Lauf bei 2355 nichts tun würde.


30
2017-11-04 14:09



Hmm .. Also dreht es nur wenn: aktuelles Datum> Datum in /var/lib/logrotate/status (wie die Datei in meinem Fall ist). - Kyle Brandt♦
Ich denke, es macht überhaupt nichts, wenn 24 Stunden vergangen sind, seit es das letzte Mal ausgeführt wurde, was anhand der Zeit der Zustandsdatei herausgefunden wird. Sobald entschieden ist, dass ein ganzer Tag verstrichen ist und rechtmäßig überhaupt etwas unternommen werden kann, werden die Entscheidungen DAILY, WEEKLY usw. anhand der Datumsfelder in der Datei getroffen. - MadHatter
Nun, es scheint das Datum in dieser Datei zu verwenden. Ich stellte den Tag einen Tag zurück in die Statusdatei und lief es ... es rotierte .. - Kyle Brandt♦
Ich bin gerade zurückgegangen und habe mein Logrotate gestochen, ich glaube, ich lag falsch, und was Sie oben schreiben, ist richtig. Es entscheidet, ob es bereits heute ausgeführt wurde, indem es den Zeitstempel der Statusdatei betrachtet; Ist dies nicht der Fall, werden die Daten der letzten Rotation aus der Statusdatei extrahiert und entsprechend ausgeführt. Ich habe gerade gelogen, um mit vi zu lotrotieren und berühre -t, um es davon zu überzeugen, dass es gestern um 2355 lief, als es meine Munin-Logs rotierte. Wenn es erneut ausgeführt wurde, obwohl es weniger als 24 Stunden vergangen war, hat es sie gedreht und die Statusdatei entsprechend aktualisiert. - MadHatter
Ich habe meine Antwort auf mein aktuelles Verständnis aktualisiert, in Anbetracht der Reihe von Tests, die ich gerade ausgeführt habe (meine Munun Logs acht Möglichkeiten ab Sonntag schneiden, aber wen interessiert das schon!). - MadHatter


Von der Logrotate-Manpage:

Normalerweise wird Logrotate täglich ausgeführt   Cron-Job. Es wird kein Protokoll ändern   mehr als einmal an einem Tag, es sei denn die   Kriterium für dieses Protokoll basiert auf dem   Log-Größe und Logrotate wird ausgeführt   mehr als einmal pro Tag, oder wenn die   Option -f oder -force wird verwendet.


9
2017-11-05 13:54



um zu sehen, wann cron.daily ausgeführt wird Hier. - Trevor Boyd Smith