如何在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”作为版本号。)

Answers:


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

其中journald.conf手册页解释auto为:

“易失性”,“持久性”,“自动”和“无”之一。如果为“ 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派生的,因此默认情况下它仍然不存在。持久性默认情况下是在rsyslogd 编写的日记过的日记/var/log/messages和轮换版本之外实现的(默认情况下/var/log/messages-YYYYMMDD运行,并从日记中获取其输入)。

因此,要启用在RHEL / CentOS 7下记录日志的持久日志记录,必须

# mkdir /var/log/journal

然后修复权限并重新启动日志记录,例如通过

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

6
一个systemctl restart systemd-journald应该做。因此,无需重新启动。
xx4h 2014年

@ xx4h,更新了答案
maxschlepzig

9
在Debian中,这是记载在/usr/share/doc/systemd/README.Debianinstall -d -g systemd-journal /var/log/journal
pevik

@pevik,我看过一个CentOS 7系统(我刚刚使用过mkdir),当前的权限是drwxr-sr-x. 3 root systemd-journal-也许日志记录可以在初始化期间修复权限/所有权。
maxschlepzig 2015年

8
学习了一个巧妙的技巧:如果您发送USR1信号而不是重新启动,则不会丢失当前的日志内容。 killall -USR1 systemd-journald
詹姆士·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/journalmkdir /var/log/journal

另请参阅


嗯,或执行`chmod 4755 / var / log / journal; chown root:systemd-journal!:2'-或只是重新启动。我将更新我的答案。
maxschlepzig

@maxschlepzig,仅重新启动无法正常工作:github.com/systemd/systemd/pull/1398#issuecomment-144247498
Evgeny Vereshchagin

chmod 4755 /var/log/journal; chown root:systemd-journal !:2工作正常。但是tmpfile:在日记目录上使用ACL魔术
Evgeny Vereshchagin

好的,另一个错误:)-我已经更新了答案。
maxschlepzig
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.