Mam prosty skrypt, który wyświetla kilka dzienników na ekranie, i przesłałem STDOUT do pliku w celu przechowywania dzienników. Ponieważ ten skrypt działa od dawna, musiałem obracać pliki dziennika, aby były one podzielone na mniejsze, łatwiejsze do zarządzania.
Problem, z którym się spotkałem, polegał na tym, że po logrotate
przeniesieniu bieżącego pliku dziennika do nowego, nowo utworzony plik dziennika nie jest już zapełniany dziennikami. Wygląda na to, że po usunięciu oryginalnego pliku dziennika jego program obsługi plików zostanie utracony, a przekierowanie nie będzie działać.
Znalazłem również ten post, który miał ten sam problem co ja i twierdzi, że można go naprawić, używając >>
zamiast >
przekierować wyjście. Przetestowałem jego rozwiązanie, ale nie zadziałało. Czy ktoś ma pomysł, jak utrzymać przekierowanie?
Odpowiedzi:
Należy użyć dyrektywy copytruncate w konfiguracji logrotate dla tego pliku dziennika.
źródło
compress
operacją, dane są duplikowane. To raz sprawiło nam problem, ale to było nasze złe, ponieważ nie powinniśmy być tak bliskolv
limitu przestrzeni. Ponadto, jak stwierdzono weman
fragmencie, możesz stracić niektóre dane dziennika między operacjami kopiowania i obcinania.Alternatywnie możesz również:
użyj narzędzia rejestrującego w skrypcie zamiast potokowania, z dedykowanym narzędziem (np. local5), na przykład:
logger -p local5.info -t myscriptname "this is some log data"
skonfiguruj syslog, aby zapisywał tę funkcję w pożądanym pliku dziennika, przykład (rsyslog.conf):
local5.* /var/log/mylogfile
ustaw regułę logrotate dla tego dziennika.
źródło
echo
. Dane wyjściowe narzędzi innych firm, które są wywoływane ze skryptu, a także wypisują coś, nie mogą być w ten sposób przekierowane do rejestratoraInną alternatywą dla rozwiązania Iain jest użycie
postrotate
skryptu do ponownego uruchomienia skryptu po zakończeniu rotacji. Odbywa się to dla wielu demonów (zrestartuj lub ponownie załaduj demona), ale nie znając twojego skryptu Nie wiem, czy to rozwiązanie ci się spodoba, czy nie (czy twój skrypt zależy od jakiegoś stanu wygenerowanego jakiś czas temu?).Zawartość
/etc/logrotate.d/your-script-name
:źródło
Możesz potokować stdout do „split” (część coreutils w Linuksie). Umożliwia dzielenie pliku / standardowego pliku na kawałki na podstawie rozmiaru, liczby linii itp. Gdy już zostanie podzielony na fragmenty, możesz w razie potrzeby zarządzać nim za pomocą programu logrotate.
źródło