Czy jest jakiś sposób na utrzymanie stałej wielkości pliku dziennika bez obracania go o nowy pusty plik i usuwania (lub archiwizowania) starego pliku. Na przykład, jeśli ustawię maksymalny rozmiar pliku dziennika na 1 MB, po zwiększeniu rozmiaru pliku powyżej tego limitu zostanie on automatycznie zaciśnięty, tekst zostanie dodany na „ogonie”, a najstarsza część tekstu zostanie wyświetlona, aby zachować rozmiar pliku 1 MB .
13
rm -f *.tar.gz.*
Odpowiedzi:
Możesz napisać mały skrypt bash, aby to zrobić. Wystarczy dopasować plik do określonej liczby bajtów, używając
tail -c
i nadpisując plik.z
man tail
:źródło
Jedynym rozwiązaniem może być napisanie własnego systemu plików przestrzeni użytkownika lub wniesienie wkładu do istniejącego. Spójrz na częściową listę w systemie plików w przestrzeni użytkownika
Jeśli nie masz umiejętności wnoszenia wkładu, zaoferuj promocję projektu lub $$$ lub oba, aby dodać go dla Ciebie.
Chciałbym mieć czas, aby to zrobić, zawsze chciałem czegoś dokładnie takiego.
źródło
Możesz zrobić coś podobnego za pomocą FIFO, który jest jak plik o rozmiarze zero bajtów.
Pamiętaj jednak, że jeśli z tego pliku nic NIE CZYTA, proces syslog może zostać zablokowany i przestanie zapisywać do WSZYSTKICH plików dziennika. Nie jestem pewien, czy to zachowanie zostało zmienione w nowszych wersjach Ubuntu / CentOS.
Jeden przykład tutaj
Na inny przykład spróbuj czegoś takiego.
Zrób swój FIFO:
I dodaj to do (r) syslog.conf, a następnie uruchom ponownie syslog:
Następnie wyświetl FIFO z jednego okna:
A w innym oknie wyślij kilka rzeczy do syslog:
Powinieneś zobaczyć linie „Test *” na wyjściu
cat
powyżej.Ta funkcja może być świetna do debugowania, szczególnie jeśli nie zależy ci na dłuższym przechowywaniu danych. Na przykład, jeśli chcesz zobaczyć wszystko oprócz spamu firewall, możesz zrobić coś takiego:
źródło
Oto moja druga odpowiedź. To jest dość hackerskie.
Użyj watch (1), aby wielokrotnie wykonywać
tail --bytes=1024
(ostatnie 1024 bajty pliku dziennika, dzięki @jjclarkson za tę odpowiedź).A następnie wyświetl plik za pomocą:
Różnica między
watch
pętlą awatch
chwilą polega na tym , że aktualizuje /tmp/messages.watch tylko, jeśli nastąpiły zmiany w / var / log / messages.Cóż, myślę, że możesz umieścić
test
pętlę while, aby ogon był wykonywany tylko, jeśli zaktualizowano / var / log / messages, ale teraz tego nie rozgryzę.źródło
https://groups.google.com/group/mod.sources/browse_thread/thread/b2136b3ab7e924e/f785b37c218bb576?hl=pl&ie=UTF-8&q=prune+log+file&pli=1
Wiele demonów (większość? Wszystkich?) Ponownie otworzy swoje pliki dziennika, jeśli zostanie wysłany sygnał HUP (np. Przez to samo zadanie cron, które uruchamia przycinanie)
źródło
Jestem pewien, że oryginalny plakat znalazł rozwiązanie po 8 latach. Oto kolejny dla innych, którzy mogą przeczytać ten wątek ...
ograniczenie ogranicza rozmiar danych wyjściowych programu i zachowuje ostatnie 200 MB danych wyjściowych za pomocą następującego polecenia:
Run_program | curtail -s 200M mójprogram.log
https://github.com/Comcast/Infinite-File-Curtailer
źródło