Jak dokładnie logrotate radzi sobie z „codziennym”?

30

Sądząc po znacznikach czasu w moich systemach, logrotate wykonuje codzienną rotację logów, gdy logrotate jest uruchamiany przez crona. Jeśli jednak uruchomię go wcześniej, pliki nie zostaną obrócone. Skąd Logrotate wie, czy powinien je obracać, czy nie, czy przechowuje historię, czy może używa znaczników czasu?

Kyle Brandt
źródło

Odpowiedzi:

32

Wierzę, że jest to zawartość pliku stanu, co jest moim przypadkiem /var/lib/logrotate.status. Każdy plik ma jeden wiersz, który jest datą ostatniej rotacji; jeśli uruchomisz logrotate w dniu, w którym dany plik ma zostać obrócony, biorąc pod uwagę liczbę dni między bieżącą datą a datą w pliku (1 dziennie, 7 tygodniowo itd.), plik zostanie obrócony.

logrotate nie obchodzi o której porze dnia jest uruchamiany; nawet jeśli zwykle działa o 2355, gdybyś uruchomił go o 0130, nadal obracałby pliki oznaczone codziennie i ostatnio zrobione wczoraj; ale uczyniwszy to, umieści dzisiejszą datę w pliku stanu (w stosunku do plików obróconych), więc drugie uruchomienie przy 2355 nic by nie zrobiło.

MadHatter obsługuje Monikę
źródło
1
Hmm .. Obraca się tylko wtedy, gdy: bieżąca data> data w /var/lib/logrotate/status(tak jak w moim przypadku plik).
Kyle Brandt,
2
Myślę, że w ogóle cokolwiek robi, jeśli minęły 24 godziny od ostatniego uruchomienia, co sprawdza się, sprawdzając plik mtime pliku stanu. Po podjęciu decyzji, że minął cały dzień i może on w ogóle zrobić wszystko zgodnie z prawem, podejmuje CODZIENNE, TYGODNIOWE itp. Decyzje na podstawie pól daty w pliku.
MadHatter obsługuje Monikę
4
Wygląda na to, że używa daty w tym pliku. Ustawiłem dzień z powrotem w pliku statusu i uruchomiłem go ... obrócił się ..
Kyle Brandt
Właśnie wróciłem i szturchnąłem mój logrotat, myślę, że się myliłem i to, co piszesz powyżej, jest słuszne. Decyduje, czy został już uruchomiony dzisiaj, sprawdzając znacznik czasu pliku stanu; jeśli nie, wyodrębnia daty ostatniego obrotu z pliku stanu i działa odpowiednio. Właśnie skłamałem, by logrotować za pomocą vi i dotknąć -t, aby przekonać, że ostatnio działał o 2355 wczoraj, kiedy obrócił moje dzienniki Munina. Ponowne uruchomienie, mimo że minęło mniej niż 24 godziny, zmieniło je i odpowiednio zaktualizowało plik stanu.
MadHatter obsługuje Monikę
Zaktualizowałem swoją odpowiedź do mojego obecnego zrozumienia, biorąc pod uwagę zestaw testów, które właśnie uruchomiłem (krojenie munina rejestruje osiem sposobów od niedzieli, ale kogo to obchodzi!).
MadHatter obsługuje Monikę
11

Ze strony podręcznika użytkownika logrotate:

Zwykle logrotate jest uruchamiany jako codzienne zadanie cron. Nie będzie modyfikować dziennika więcej niż raz dziennie, chyba że kryterium tego dziennika jest oparte na jego wielkości i logrotate jest uruchamiany więcej niż raz dziennie lub chyba, że ​​użyto opcji -f lub -force.

Sebbert
źródło
1
aby zobaczyć, kiedy uruchomione jest cron.daily, przejdź tutaj .
Trevor Boyd Smith