Dlaczego Apache odmawia zapisywania do plików dziennika (tych ErrorLog
/ CustomLog
nich) po ręcznym usunięciu ich zawartości?
Nie zapisze się ponownie w tych plikach dziennika, dopóki nie zrestartuję Apache.
Dlaczego tak jest? Jak mogę bezpiecznie wyczyścić plik dziennika bez konieczności ponownego uruchamiania Apache?
Mam Apache 2.2.14 na Ubuntu 10.04.
apache-2.2
ubuntu
AtomicFault
źródło
źródło
logrotate
co wysyła odpowiedni sygnał przeładowania / ponownego uruchomienia do Apache (patrz odpowiedź Pedro poniżej). Nickgrim opisał „dlaczego” zatrzymywanie dzienników - Apache wciąż pisze do starego i-węzła (który nie jest już podłączony do systemu plików, gdzie można go dostać)Odpowiedzi:
Właśnie zrobiłem krótki test:
Zauważ, że
vimtest
ma inny numer i-węzła po jego edycji, a zatem jest w rzeczywistości innym plikiem (choć o tej samej nazwie co stary plik).Kiedy więc edytujesz plik za pomocą vima, usuwa on stary plik i tworzy nowy o tej samej nazwie. Problem, który widzisz, jest spowodowany tym, że Apache nadal zapisuje do starego (usuniętego) pliku (możesz to sprawdzić za pomocą
lsof
).Jeśli naprawdę chcesz obciąć plik dziennika, zastanów się
truncate -s 0 /path/to/file.log
(który wydaje się obcinać w miejscu)źródło
Polecam wymuszanie rotacji plików dziennika Apache2 za pomocą:
Jeśli spojrzysz
/etc/logrotate.d/apache2
, zobaczysz, żeApache2
konfiguracja musi zostać ponownie załadowana po usunięciu pliku dziennika za pomocą:W systemie Ubuntu możesz alternatywnie:
źródło