Postfiks nie loguje się już do / var / log / mail po jego usunięciu i ponownym utworzeniu?

10

Przypadkowo usunąłem /var/log/mailplik. Do tego momentu mogłem go monitorować za pomocą postfiksów. Teraz wydaje się, że Postfix nie wysyła swoich dzienników /var/log/mail, ponieważ plik nie jest aktualizowany o nowe komunikaty dziennika.

drpaneas
źródło

Odpowiedzi:

9

Kiedy usuwasz plik mail.log, rsyslog (na ubuntu) luźny uchwyt do pliku. Aby przywrócić działanie systemu Ubuntu, podaj:

sudo service rsyslog restart

Spowoduje to nie tylko utworzenie nowego pliku, ale także rozpoczęcie zapisywania dzienników.

Ashish
źródło
1
Zamiast powiedzieć, co zrobiłeś, uogólnij odpowiedź (w pouczający sposób), podając dlaczego.
Julie Pelletier,
4

Nawet po utworzeniu pustego pliku

touch /var/log/mail

musisz zrestartować syslog

service syslog restart

a potem rejestruje zysk :)

drpaneas
źródło
4

Jest to błąd w syslog, ale ilustruje typowy problem, gdy usuwa się plik, gdy jest on otwarty przez program. Kiedy wykonujesz „rm”, usuwasz pozycję katalogu, ale NIE usuwasz pliku bazowego. System operacyjny przechowuje liczbę odwołań do pliku i tak naprawdę nie usunie bazowych danych pliku, dopóki liczba odniesień nie spadnie do zera. W przypadku pliku średniego liczba referencyjna nieotwartego pliku wynosi jeden (pozycja katalogu). Po otwarciu pliku liczba jest zwiększana do dwóch. Jeśli drugi program otworzy ten sam plik, liczba zostanie zwiększona do trzech. Jeśli pozycja katalogu zostanie teraz usunięta, liczba zostanie zmniejszona do dwóch - co oznacza, że ​​plik jest nieprawidłowy (nie ma nazwy),

Po usunięciu / var / log / mail program rejestrujący nadal ma otwarty plik do zapisu. Jeśli utworzysz nowy / var / log / mail, wskaże on plik inny niż ten, który program rejestrujący obecnie zapisuje. Jedynym sposobem, aby wszystko było spójne, jest ponowne uruchomienie rejestratora systemu. Gdy oryginalny program rejestrujący zakończy pracę, wszystkie powiązane z nim pliki są zamykane - w tym anonimowy dziennik poczty, którego wpis katalogu został usunięty. Po zrestartowaniu rejestratora systemowego otworzy ponownie / var / log / mail, gdy będzie musiał napisać komunikat dziennika, i utrzyma go później otwarty.

Innym sposobem jest to często wykrywane, gdy działający program zapełnia cały dysk danymi pliku; użytkownik usuwa bardzo duży plik, ale miejsce na dysku nie jest zwalniane, ponieważ plik nadal istnieje i zajmuje miejsce na dysku, ale pozycja katalogu została usunięta. Kiedy program się zakończy (albo dlatego, że użytkownik go zabił, albo sam się zakończył), miejsce na dysku zostanie odzyskane, ponieważ liczba referencji w pliku spadnie do zera.

Program rejestrujący może zrobić, aby temu zapobiec, najpierw pisząc komunikat dziennika, sprawdź, czy pozycja katalogu pliku dziennika istnieje, a jeśli nie istnieje, zamknij oryginalny plik dziennika, otwórz nowy, a następnie przepisz wiadomość - aby wiadomość nie zginęła. Ale zrobienie tego wszystkiego wymagałoby znacznie większej złożoności, niż powinien mieć program rejestrujący system - dla każdego napisanego komunikatu zajmie to trochę więcej czasu ze względu na dodatkowe sprawdzanie katalogu - co się powiedzie za każdym razem, gdy plik ma NIE zostało usunięte.

Aby lepiej zrozumieć powyższe, poniższe polecenie jest pouczające, ponieważ opisuje wywołanie systemowe, które wykonuje usunięcie pozycji katalogu i zmniejszenie odniesienia: „man 3 unlink”

Douglas Campbell
źródło
4

To nie jest problem w CentOS 7. Ktoś pomyślał, że dobrym pomysłem byłoby posiadanie dzienników poczty z postfiksami, aby przejrzeć dziennik. Jeśli chcesz zobaczyć dzienniki Postfiksa:

journalctl -u postfix

(aby zobaczyć cały dziennik)

journalctl -u postfix -f

(aby ogonić dziennik)

Możesz także potrzebować w main.cf do postfiksa

syslog_name = postfix
krawiec nick
źródło
1
Spędziłem trzy godziny, próbując naprawić system, w którym zniknęło rejestrowanie. Czy nie znalazłem tego postu, spędziłbym kolejne 3 godziny. Mój dziennik miał 10000 linii, więc to polecenie bardzo mi pomogłojournalctl --vacuum-time=1d
Eugene van der Merwe
2

fwiw nowsze wersje dziennika Postfiksa /var/log/mail.logi ja również musiałem uruchomić sudo chmod a+w /var/log/mail*i service postfix restartodzyskać moje dzienniki postfiksu po usunięciu

bsautner
źródło