Jak wyświetlić komunikaty dziennika z poprzednich uruchomień w CentOS 7?


78

Wykonanie journalctlw systemie CentOS 7 drukuje tylko wiadomości wygenerowane po ostatnim uruchomieniu.

Komenda

# journalctl --boot=-1

odbitki

Failed to look up boot -1: Cannot assign requested address

i wychodzi ze statusem 1.

Porównując go do obecnego systemu Fedora, zauważam, że CentOS 7 nie ma /var/log/journal(i journalctlnie zapewnia --list-boots).

Zatem moje pytanie, jak wyświetlić komunikaty dziennika, które zostały zapisane przed datą ostatniego uruchomienia.

A może ta funkcja musi być włączona w CentOS 7?

( journalctlStrona podręcznika zawiera „systemd 208” jako numer wersji).

Odpowiedzi:


99

tl; dr

W CentOS 7 musisz włączyć trwałe przechowywanie komunikatów dziennika:

# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald

W przeciwnym razie komunikaty dziennika dziennika nie są zachowywane między kolejnymi uruchomieniami.

Detale

Określa, czy journaldzachowuje komunikaty dziennika z poprzednich rozruchów /etc/systemd/journald.conf. Domyślne ustawienie w CentOS 7 to:

[Journal]
Storage=auto

Gdzie strona man Journald.conf wyjaśnia autojako:

Jeden z „niestabilnych”, „trwałych”, „automatycznych” i „brak”. Jeśli jest „niestabilny”, dane dziennika będą przechowywane tylko w pamięci, tj. Poniżej hierarchii / run / log / journal (która jest tworzona w razie potrzeby). Jeśli „trwałe”, dane będą przechowywane najlepiej na dysku, tj. Poniżej hierarchii / var / log / journal (która jest tworzona w razie potrzeby), z możliwością powrotu do / run / log / journal (która jest tworzona w razie potrzeby), podczas wczesny rozruch i jeśli dysku nie można zapisać. „ auto ” jest podobne do „trwałego”, ale katalog / var / log / journal nie jest tworzony w razie potrzeby, więc jego istnienie kontroluje, gdzie idą dane dziennika .

(podkreśl moje)

Strona podręcznika systemd-journald.service stwierdza zatem, że:

Domyślnie dziennik przechowuje dane dziennika w / run / log / journal /. Ponieważ / run / jest niestabilny, dane dziennika są tracone przy ponownym uruchomieniu. Aby dane były trwałe, wystarczy utworzyć / var / log / journal / gdzie systemd-journald będzie następnie przechowywać dane.

Najwyraźniej domyślne ustawienie zostało zmienione w Fedorze 19 (na stałe przechowywanie), a ponieważ CentOS 7 pochodzi z Fedory 18 - domyślnie nadal tam nie jest. Trwałość jest domyślnie implementowana poza dziennikiem poprzez /var/log/messagesi wersje obrócone, /var/log/messages-YYYYMMDDktóre są pisane przez rsyslogd (który domyślnie działa i pobiera dane z dziennika).

Tak więc, aby umożliwić trwałe logowanie za pomocą dziennika w RHEL / CentOS 7, trzeba to zrobić

# mkdir /var/log/journal

a następnie napraw uprawnienia i uruchom ponownie dziennik, np. przez

# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald

6
systemctl restart systemd-journaldPowinno wystarczyć. Dlatego nie jest wymagane ponowne uruchomienie.
xx4h

@ xx4h, zaktualizowałem odpowiedź
maxschlepzig

9
W debian to udokumentowane w /usr/share/doc/systemd/README.Debian: install -d -g systemd-journal /var/log/journal.
pevik,

@pevik, spojrzałem na system CentOS 7 (gdzie właśnie użyłem mkdir) i obecne uprawnienia są drwxr-sr-x. 3 root systemd-journal- być może dziennik naprawia uprawnienia / własność podczas inicjalizacji.
maxschlepzig

8
Nauczył się zgrabnej sztuczki: jeśli wyślesz USR1sygnał zamiast restartu, nie stracisz bieżącej zawartości dziennika. killall -USR1 systemd-journald
James B

1
systemctl restart systemd-journald

Możesz stracić dzienniki: patrz https://github.com/systemd/systemd/issues/2236

mkdir /var/log/journal

Nastąpiła zmiana w v208:

systemd-journald nie będzie już dostosowywał tworzonej grupy plików dziennika do grupy „systemd-journal”. Zamiast tego polegamy na katalogu dziennika będącym własnością grupy „systemd-journal” i jego zestawie bitów setgid, dzięki czemu warstwa systemu plików jądra automatycznie wymusi, aby pliki dziennika dziedziczyły to przypisanie grupy.

Fragment kodu tmpfiles.d (5) zawarty w systemied upewni się, że bit i grupa setgid są poprawnie ustawione w katalogu dziennika, jeśli istnieje przy każdym uruchomieniu.

Powinieneś więc uruchomić coś takiego jak systemd-tmpfiles --create --prefix /var/log/journalpomkdir /var/log/journal

Zobacz także :


Hm, lub zrób `chmod 4755 / var / log / journal; chown root: systemd-journal!: 2 '- lub po prostu uruchom ponownie. Zaktualizuję moją odpowiedź.
maxschlepzig

@maxschlepzig, po prostu ponowne uruchomienie nie działa: github.com/systemd/systemd/pull/1398#issuecomment-144247498
Evgeny Vereshchagin

chmod 4755 /var/log/journal; chown root:systemd-journal !:2działa w porządku. ale tmpfiles: użyj magii ACL w katalogach czasopism
Evgeny Vereshchagin

ok, kolejny błąd :) - Zaktualizowałem swoją odpowiedź.
maxschlepzig
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.