Zastanawiałem się, czy istnieje ogólny sposób na wyczyszczenie logów?
Jestem nowy w Ubuntu i próbuję skonfigurować Postfix. Logowane pytanie to /var/log/mail.log
. Zastanawiałem się, czy istnieje właściwy sposób, aby to wyczyścić, zamiast wchodzić w to i usuwać wszystkie linie i zapisywać je. Uważam, że czasami błędy nie są zapisywane bezpośrednio po wyczyszczeniu dziennika i zapisaniu go.
Uwaga dodatkowa: Mam problem z skonfigurowaniem Postfiksa i staram się ułatwić mi czytanie dzienników, mając nadzieję, że może mi pomóc, zamiast przewijania w dół.
Odpowiedzi:
Możesz użyć:
Spowoduje to obcięcie dziennika bez konieczności edytowania pliku. To także niezawodny sposób na odzyskanie przestrzeni. Czasami ludzie popełniają błąd przy użyciu rm w dzienniku, a następnie odtwarzaniu nazwy pliku, jeśli inny proces ma otwarty plik, wówczas nie odzyskasz miejsca, dopóki ten proces się nie zamknie i nie zepsujesz jego uprawnień.
Również jeśli oglądasz zawartość dziennika, możesz użyć
tail
polecenia:Ctrl-C zerwie ogon.
źródło
/bin/csh
(wspólne dla FreeBSD) wydzwania to za pomocą „Niepoprawnego polecenia zerowego”, tymczasemzsh
(popularny zamiennikbash
) czeka EOF. Zobacz serverfault.com/a/381380/67675>
składni w crontabie nie działa, ponieważ może nie rozpoznawać jej jako składniTak, jest właściwy sposób: w ogóle nie czyścisz logów. Ci obracać je. Rotacja polega na przełączeniu wyjścia dziennika do nowego pliku o tej samej nazwie, z poprzednimi N plikami dziennika przechowywanymi pod zestawem N powiązanych nazw plików.
To, jak obraca się dzienniki, zależy od tego, jak je zapisujesz. Jest to często pomijany punkt. Niektóre odpowiedzi tutaj dotykają go przynajmniej, wspominając, że niektóre programy rejestrujące przechowują otwarty deskryptor pliku dziennika, więc samo usunięcie pliku nie zwolni miejsca, a nawet przełączy dane wyjściowe na nowy plik dziennika.
Jeśli na przykład program zapisujący plik dziennika pochodzi
multilog
zdaemontools
paczki , nie robisz nic, aby w ogóle obracać dzienniki - bez ręcznych skryptów, bezcron
zadań. Po prostu powiedz,multilog
że dane wyjściowe dziennika znajdują się w katalogu, a on sam utrzyma automatycznie obrócony i ograniczony rozmiarami zestaw N plików dziennika w tym katalogu.Jeśli program zapisujący pliki dziennika pochodzi
svlogd
zrunit
pakietu , w innym przykładzie, to samo dotyczy. W ogóle nie robisz nic oprócz wskazywania narzędzia w katalogu. Sama utrzyma automatycznie obrócony i ograniczony rozmiarami zestaw N plików dziennika w tym katalogu.Jeśli używasz
rsyslog
do zapisywania plików dziennika, program rejestrujący może zostać zatrzymany po osiągnięciu przez plik dziennika określonego rozmiaru i uruchomieniu skryptu . Musisz napisać treść skryptu, aby faktycznie zmienić nazwę pliku dziennika i usunąć stare pliki dziennika na podstawie ograniczeń dotyczących całkowitego rozmiaru, ale przynajmniej program rejestrujący zamknął plik i wstrzymał zapisywanie dziennika podczas tego procesu.Stary
syslogd
sposób obracania dzienników, wciąż oczekiwany przez programy do rejestrowania, takie jak syslog-ng, i którego przykładem są narzędzia, takie jaklogrotate
wspomnianedjangofan
w innej odpowiedzi tutaj, jest nieco bardziej przypadkowy. Jeden uruchamiacron
zadanie, które okresowo zmienia nazwy plików dziennika i ponownie uruchamia demona rejestrującego (używając dowolnego nadzorcy demonów, na którym działa). Problem polega na tym, że nie wymusza to ograniczenia rozmiaru ogólnego. W wolnych tygodniach można uzyskać N bardzo małych dziennych plików dziennika, podczas gdy w pracowite dni można uzyskać 1 bardzo duży plik dziennika, który znacznie przekracza limit rozmiaru.Dlatego później i lepsze narzędzia, jak
multilog
isvlogd
posiada opcje konfiguracyjne rozmiar plików i faktycznie sprawdzić plik dziennika wielkości siebie, oczywiście. Świat nauczył się, że odpytywanie dzienników zgodnie z harmonogramem zcron
zadaniami, a nawetlogrotate
demonem, pozostawia okna, aby rozmiar był niepoprawny, oraz że właściwe miejsce do przeprowadzania tych kontroli i tak rygorystycznie egzekwuje ograniczenia wielkości zdefiniowane przez administratora, aby pliki dziennika nigdy nie połykają partycji, na której się znajdują, są w programie, który faktycznie zapisuje pliki na pierwszym miejscu.źródło
template(name="DYNmail" type="string" string="/var/log/%$YEAR%/%$MONTH%/%$DAY%/mail.log")
dyrektywy, po której następujeif ($syslogfacility-text == 'mail') then -?DYNmail;TraditionalFormat
. W ten sposób rotacja logów jest po prostu bezproblemowa, przynajmniej gdy pojedynczy plik dziennie jest w porządku. W przypadku bardzo dużych dzienników (wymagających wielokrotnej rotacji dziennie)$HOUR
również jest to możliwe.Możesz też tego użyć ..
Tutaj wszystkie pliki dziennika w / opt / package / logs staną się puste.
źródło
Tak, istnieje narzędzie dla systemu Linux o nazwie LogRotate .
źródło
Jeśli powodem wyczyszczenia dziennika jest zwolnienie miejsca, możesz do nich cat / dev / null, bez przerywania pisania programów w nim. Nigdy ich nie usuwaj! niektóre oprogramowanie może narzekać, przestając działać lub całkowicie ignorując dziennik do następnego uruchomienia
źródło
for i in $(find /var/log -type f); do cat /dev/null > $i; done
Nadpisywanie krótkich i zgodnych treści:
: > /dest/file
Ale istnieje także wywołanie systemowe truncate (2) i odpowiednie narzędzie przestrzeni użytkownika
truncate
w wielu * NIX'ach.źródło
Jeśli chcesz zachować plik przed jego wyczyszczeniem, możesz:
Jeśli chcesz wyszukać konkretny tekst lub wiadomość e-mail w dzienniku, możesz użyć grep. Jeśli chcesz zachować trochę grafiki na temat wykorzystania poczty, możesz użyć AWStats.
źródło
Oto jak to robię, a dotyczy to tylko NGINX, możesz to usunąć, aby działało na wszystkich plikach dziennika.
źródło
Pracuje dla mnie
źródło