Как отобразить сообщения журнала из предыдущих загрузок под CentOS 7?

78

Выполнение journalctlв системе CentOS 7 просто печатает сообщения, сгенерированные после последней загрузки.

Команда

# journalctl --boot=-1

печать

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

и выходит со статусом 1.

Сравнивая его с текущей системой Fedora, я замечаю, что CentOS 7 не имеет /var/log/journaljournalctlне предоставляет --list-boots).

Таким образом, мой вопрос, как отобразить сообщения журнала, которые были написаны до даты последней загрузки.

Или, возможно, эта функция должна быть включена в CentOS 7?

( journalctlСтраница руководства перечисляет 'systemd 208' как номер версии.)

maxschlepzig
источник

Ответы:

99

ТЛ; др

В 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

Где справочная страница journald.conf объясняется autoкак:

Один из "volatile", "persistent", "auto" и "none". Если установлено значение «volatile», данные журнала журнала будут храниться только в памяти, то есть ниже иерархии / run / log / journal (которая создается при необходимости). Если «постоянный», данные будут храниться предпочтительно на диске, то есть ниже иерархии / var / log / journal (которая создается при необходимости), с откатом на / run / log / journal (которая создается при необходимости), во время ранняя загрузка и если диск не для записи. « auto » аналогично «persistent», но каталог / var / log / journal не создается при необходимости, так что его существование контролирует, куда попадают данные журнала .

(подчеркните мой)

Страница людей Systemd-journald.service , таким образом , утверждает , что:

По умолчанию журнал хранит данные журнала в / run / log / journal /. Поскольку / run / является изменчивым, данные журнала теряются при перезагрузке. Чтобы сделать данные постоянными, достаточно создать / var / log / journal /, где systemd-journald будет хранить данные.

Очевидно, в Fedora 19 значение по умолчанию было изменено (на постоянное хранилище), и поскольку CentOS 7 является производным от Fedora 18 - он по-прежнему непостоянен, по умолчанию. Постоянство по умолчанию реализовано за пределами journald через /var/log/messagesи повернутые версии, /var/log/messages-YYYYMMDDкоторые записываются с помощью rsyslogd (который запускается по умолчанию и получает свои данные из journald).

Таким образом, чтобы включить постоянное ведение журнала с journald под RHEL / CentOS 7, необходимо

# mkdir /var/log/journal

а затем исправить разрешения и перезапустить journald, например, через

# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
maxschlepzig
источник
6
А systemctl restart systemd-journaldдолжен это сделать. Поэтому перезагрузка не требуется.
xx4h
@ xx4h, обновил ответ
maxschlepzig
9
В Debian это описано в /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- возможно, journald исправляет права доступа / владельца во время инициализации.
maxschlepzig
8
Изучил хитрый трюк: если вы отправляете USR1сигнал вместо перезапуска, вы не потеряете текущее содержимое журнала. killall -USR1 systemd-journald
Джеймс Б.
1
systemctl restart systemd-journald

Вы можете потерять свои журналы: см. Https://github.com/systemd/systemd/issues/2236

mkdir /var/log/journal

Есть изменение в v208:

systemd-journald больше не будет настраивать группу файлов журнала, которые она создает, в группу «systemd-journal». Вместо этого мы полагаемся на каталог журнала, которым владеет группа «systemd-journal», и на его установленный бит установки, так что уровень файловой системы ядра будет автоматически обеспечивать, чтобы файлы журнала наследовали это групповое назначение.

Фрагмент tmpfiles.d (5), включенный в systemd, обеспечит правильность установки бита и группы 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
Евгений Верещагин
chmod 4755 /var/log/journal; chown root:systemd-journal !:2работает отлично. но tmpfiles: используйте магию ACL для каталогов журналов
Евгений Верещагин
хорошо, еще одна ошибка :) - я обновил свой ответ.
maxschlepzig