CentOS 7에서 이전 부팅의 로그 메시지를 어떻게 표시합니까?


78

journalctlCentOS 7 시스템에서 실행 하면 마지막 부팅 후 생성 된 메시지 만 인쇄됩니다.

명령

# journalctl --boot=-1

인쇄물

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

상태 1로 종료됩니다.

현재 Fedora 시스템과 비교할 때 CentOS 7에는 /var/log/journal(및 journalctl제공하지 않음 --list-boots) 이 없습니다 .

따라서 내 질문은 마지막 부팅 날짜 전에 작성된 로그 메시지를 표시하는 방법입니다.

아니면 CentOS 7에서이 기능을 활성화해야합니까?

(설명서 journalctl페이지에는 'systemd 208'이 버전 번호로 나열되어 있습니다.)

답변:


99

tl; dr

CentOS 7에서는 로그 메시지를 지속적으로 저장해야합니다.

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

그렇지 않으면 부팅간에 저널 로그 메시지가 유지되지 않습니다.

세부

journald이전 부팅에서 로그 메시지를 유지 할지 여부 는를 통해 구성됩니다 /etc/systemd/journald.conf. CentOS 7의 기본 설정은 다음과 같습니다.

[Journal]
Storage=auto

를 Where를 journald.conf 메뉴얼 페이지 설명 auto과 같이

"휘발성", "지속적", "자동"및 "없음"중 하나입니다. "휘발성"인 경우 저널 로그 데이터는 메모리에만 저장됩니다 (예 : / run / log / journal 계층 구조 (필요한 경우 작성 됨)). "지속적"인 경우 데이터는 디스크에 저장됩니다 (예 : 필요한 경우 생성되는 / var / log / journal 계층 아래). 초기 부팅 및 디스크 쓰기 가능하지 않은 경우. " auto "는 "persistent"와 유사하지만 / var / log / journal 디렉토리 는 필요에 따라 작성되지 않으므로 로그 데이터의 위치를 ​​제어합니다 .

(내 강조)

systemd-journald.service man 페이지는 이렇게한다고 :

저널은 기본적으로 / run / log / journal /에 로그 데이터를 저장합니다. / run /은 일시적이므로 로그 데이터는 재부팅시 손실됩니다. 데이터를 영구적으로 만들려면 systemd-journald가 데이터를 저장하는 / var / log / journal /을 만드는 것으로 충분합니다.

명백히, 기본값은 Fedora 19에서 (사이트 간 스토리지로) 변경되었으며 CentOS 7은 Fedora 18에서 파생되었으므로 기본적으로 여전히 영구적이지 않습니다. 지속성은 기본적으로 저널링 된 비아 /var/log/messages/var/log/messages-YYYYMMDDrsyslogd에 의해 작성된 회전 버전 (기본적으로 실행되고 저널에서 입력을 가져옴) 외부에서 구현됩니다.

따라서 RHEL / CentOS 7에서 저널링 된 영구 로깅을 사용하려면

# mkdir /var/log/journal

그런 다음 권한을 수정하고 저널링을 다시 시작하십시오 (예 :

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

6
A는 systemctl restart systemd-journald그것을해야한다. 따라서 재부팅이 필요하지 않습니다.
xx4h

@ xx4h, 답변 업데이트
maxschlepzig

9
데비안에서이은에 설명되어 있습니다 /usr/share/doc/systemd/README.Debian: install -d -g systemd-journal /var/log/journal.
pevik

@pevik, CentOS 7 시스템을 보았습니다 (방금 mkdir을 사용했습니다). 현재 권한은 drwxr-sr-x. 3 root systemd-journal아마도 저널링 중에 권한 / 소유권이 수정되었습니다.
maxschlepzig

8
깔끔한 트릭을 배웠습니다. USR1다시 시작 하는 대신 신호 를 보내면 현재 저널링 된 내용을 잃지 않습니다. killall -USR1 systemd-journald
James B

1
systemctl restart systemd-journald

로그를 잃을 수 있습니다 : https://github.com/systemd/systemd/issues/2236 참조

mkdir /var/log/journal

변화 의는 v208:

systemd-journald는 더 이상 저널 파일 그룹을 "systemd-journal"그룹으로 조정하지 않습니다. 대신 "systemd-journal"그룹과 setgid 비트 세트가 소유하는 저널 디렉토리에 의존하므로 커널 파일 시스템 계층은 저널 파일이이 그룹 할당을 상속하도록 자동으로 시행합니다.

systemd에 포함 된 tmpfiles.d (5) 스 니펫은 setgid 비트 및 그룹이 모든 부팅에 존재하는 경우 저널 디렉토리에 올바르게 설정되어 있는지 확인합니다.

그래서, 당신은 같은 것을 실행해야합니다 systemd-tmpfiles --create --prefix /var/log/journal후를mkdir /var/log/journal

참조 :


흠, 또는`chmod 4755 / var / log / journal; chown root : systemd-journal! : 2 '-또는 그냥 재부팅하십시오. 답변을 업데이트하겠습니다.
maxschlepzig

@maxschlepzig, 바로 재부팅이 작동하지 않습니다 : github.com/systemd/systemd/pull/1398#issuecomment-144247498
예브게니 Vereshchagin

chmod 4755 /var/log/journal; chown root:systemd-journal !:2잘 작동합니다. 그러나 tmpfiles : 저널 디렉토리에서 ACL 매직 사용
Evgeny Vereshchagin

좋아, 또 다른 버그 :)-내 대답을 업데이트했습니다.
maxschlepzig
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.