Logrotuj i otwórz pliki

21

Jak Logrotate obsługuje otwarte pliki? Czy Logrotate może obracać pliki otwarte przez proces?

Kyle Brandt
źródło

Odpowiedzi:

7

Do tych aplikacji, które nie akceptują sygnałów z logrotate, jak opisał Rory, używam kilku metod.

  1. Użyj opcji copytruncate
  2. Dodaj instrukcję post-rotate, aby ponownie uruchomić usługę

Decyzja o wyborze zależy od wielkości plików dziennika i konieczności bezproblemowego logowania. To będzie analiza ryzyka z twojej strony. Jednak, aby dać przykład, używam restartu po rotacji w niektórych logach, w których powinienem używać copytruncate. Jednak pliki często zawierają kilka koncertów, a kopiowanie może zająć wystarczająco dużo czasu, aby lepiej było stracić sekundę lub dwie każdej nocy.

Scott Pack
źródło
Przepraszam za zbyt późno, ale myślę, że mogę zaoszczędzić trochę czasu innym, szukającym tego problemu. Spójrz na inne podejście do rozwiązania tego problemu. unix.stackexchange.com/a/122942/189725
Victor
17

Wygląda na to, że chciałbym mieć następujące, ale nadal zainteresowany czyjąkolwiek wiedzą na ten temat:

copytruncate
              Truncate  the original log file to zero size in place after cre‐
              ating a copy, instead of moving the old log file and  optionally
              creating  a new one. 
Kyle Brandt
źródło
1
To jak robienie „cp coś.log coś.log.1;:> coś.log”, więc plik się opróżnia, ale uchwyt pliku na nim nie jest zepsuty. Problemem jest czas między dwiema komendami, możesz stracić jakąś linię logów
promień
5

logrotate wyśle ​​prawidłowy sygnał do procesu, informując go o ponownym otwarciu plików dziennika. Działa po wyjęciu z pudełka dla rzeczy takich jak apache lub mysql.

Możesz to zobaczyć w skrypcie postrotate dla apache. Jeśli masz własnego demona i chcesz, aby logrotate z nim pracował, upewnij się, że nasłuchuje określonego sygnału i ponownie otwiera pliki dziennika.

Jeśli nie możesz zmienić programu, możesz sprawdzić, czy demon ma sposób na automatyczne opróżnianie dzienników. Lub dodaj prerotate, który zatrzymuje serwer i postrotate, który uruchamia go ponownie.

Rory
źródło
Dobra, nie sądzę, że uda mi się to zrobić, ale miło wiedzieć, jaki jest standard :-)
Kyle Brandt