Mam aplikację linux, która stale zapisuje informacje logowania do pliku dziennika, np. /var/log/application.log
. Ponieważ aplikacja nie obraca pliku automatycznie, ten plik dziennika może osiągnąć rozmiar gigabajtów w ciągu kilku tygodni, więc chcę mieć możliwość prawidłowego obracania tego pliku
Moją główną obawą jest to, że aby zawsze obracać plik otwierany przez aplikację, prawdopodobnie będę musiał:
Przenieś plik do jego obróconej postaci
/var/log/application.log -> /var/log/application.log.2013-01-28
Utwórz pusty
/var/log/application.log
. Obs: W tym momencie proces aplikacji wciąż pisze/var/log/application.log.2013-01-28
Zmień deskryptor pliku procesu aplikacji, aby wskazywał ponownie
/var/log/application.log
Więc mam rację? Jeśli tak, jak mogę to zrobić? (głównie zmiana części deskryptora pliku)
Jeśli nie, jaki jest właściwy sposób i jak to zrobić?
dup2
nowy deskryptor nad starym, a następnie zamknij nowy deskryptor.)Odpowiedzi:
Napisz
logrotate
konfigurację do użyciacopytruncate
źródło
Większość takich aplikacji reaguje na sygnał, na przykład
SIGHUP
, i zamyka i ponownie otwiera swoje pliki dziennika po otrzymaniu sygnału. Sprawdź dokumentację aplikacji pod kątem prawidłowego sygnału do wysłania.źródło