W jakiś sposób proces wciąż zapisuje plik, mimo że zmieniłem jego nazwę.
Nazywa się to normalnym działaniem systemu operacyjnego . Po otwarciu pliku nie ma znaczenia ani jeden proces (y) z otwartym deskryptorem pliku, jakie nazwy ma plik, ani nawet to, czy plik w ogóle ma nazwę.
Mówiąc najprościej, schemat logowania twojego programu (jeśli tak naprawdę jest) jest sofistyczny. Doświadczasz dokładnie, dlaczego jest on somatyczny. Ten plik będzie się powiększał i trwał przez cały czas, dopóki program generujący dziennik będzie działał, dopóki nie zużyje całego miejsca na dysku dostępnego dla użytkownika, z którego działa. (Niebo pomoże ci, jeśli twój program działa jako superużytkownik.) Jeśli rozłączysz plik, program będzie nadal zjadał miejsce na dysku w nieskończoność, ponieważ plik istnieje na dysku bez nazwy, dopóki jego ostatni otwarty deskryptor pliku nie zostanie zamknięty. I nie można obrócić pliku dziennika ani zresetować pozycji otwartego deskryptora pliku spoza samego programu. Więc nawet obcięcie nie działa, ponieważ program kontynuuje pisanie od swojej ostatniej pozycji, asta osoba odkryła .
Nie ma nic, co możesz zrobić teraz, bez dołączania debuggera, aż do zakończenia programu. Następnym razem powiedz programowi, aby zalogował się do standardowego błędu lub standardowego wyjścia, jeśli jest to w ogóle możliwe. Następnie wysłać ten błąd standardowy / standardowe wyjście poprzez rurę do programu takiego jak multilog
, multilog
, s6-log
, svlogd
, tinylog
, lub cyclog
. Otrzymasz zestaw plików dziennika z automatycznie zmienianym i obracanym na żądanie limitem rozmiaru.
Następnym gorszym działaniem jest otwarcie pliku w trybie dołączania. Będziesz musiał się zastanowić, kopiując i obcinając dziennik, ponieważ obracanie przez zmianę nazwy pliku nadal nie będzie działać; i oczywiście może to spowodować utratę danych dziennika, jak logrotate
napisano na stronie podręcznika, z powodu możliwości między utworzeniem kopii a obcięciem pliku. Wyżej wymienione narzędzia rejestrujące nie tracą danych dziennika w nieprzewidywalnych punktach z powodu rotacji dziennika przez takie jak newsyslog
lub logrotate
(które nie są potrzebne i nie są używane). Używaj ich w połączeniu z nadzorcą procesu, który utrzymuje potok w stanie otwartym, a nawet nie tracą danych dziennika, gdy ktoś ponownie konfiguruje i ponownie uruchamia rejestrator w locie.