在CentOS 7系统下执行journalctl只会打印上次引导后生成的消息。

命令

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

#1 楼

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即可存储数据。永久存储),并且由于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


评论


应该使用systemctl restart systemd-journald重新启动。因此,无需重新启动。

–xx4h
14-10-16在17:52

@ xx4h,更新了答案

–maxschlepzig
15年7月30日在20:39

在debian中,这记录在/usr/share/doc/systemd/README.Debian中:install -d -g systemd-journal / var / log / journal。

– Pevik
15年8月12日在20:13

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

–maxschlepzig
15年8月13日在6:10

学习了一个巧妙的技巧:如果您发送USR1信号而不是重新启动,则不会丢失当前的日志内容。 killall -USR1 systemd-journald

–詹姆斯B
16/09/16在12:12

#2 楼

systemctl restart systemd-journald

您可能会丢失日志:请参阅https://github.com/systemd/systemd/issues/2236
mkdir /var/log/journal

v208有所更改:

systemd-journald将不再将其创建的日记文件组调整为“ systemd-journal”组。取而代之的是,我们依靠日记目录归“ systemd-journal”组及其setgid位所拥有,以便内核文件系统层将自动强制日记文件继承此组分配。 tmpfiles。如果每次引导时都存在,则systemd中包含的d(5)代码段将确保在日记目录中正确设置了setgid位和组。 />另请参见:

错误:systemd-tmpfiles --create --prefix /var/log/journal组的用户无法读取某些日记文件


评论


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

–maxschlepzig
2015年9月30日下午6:43

@maxschlepzig,仅重新启动不起作用:github.com/systemd/systemd/pull/1398#issuecomment-144247498

– Evgeny Vereshchagin
15年9月30日在12:09

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

– Evgeny Vereshchagin
2015年9月30日12:13在

好的,另一个错误:)-我已经更新了答案。

–maxschlepzig
15年9月30日在18:46