如何在 CentOS 7 下显示之前启动的日志消息?

如何在 CentOS 7 下显示之前启动的日志消息?

在 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

太长了;博士

在 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为:

“易失性”、“持久性”、“自动”和“无”之一。如果为“易失性”,日志日志数据将仅存储在内存中,即在 /run/log/journal 层次结构(如果需要时创建)之下。如果“持久”,数据将优先存储在磁盘上,即在 /var/log/journal 层次结构(如果需要时创建)下方,并回退到 /run/log/journal(如果需要则创建),早期启动并且磁盘不可写。 ”汽车”与“持久”类似,但目录/var/log/日志如果需要则不会创建,以便它的存在控制日志数据的去向

(强调我的)

systemd-journald.service 手册页因此指出:

默认情况下,日志将日志数据存储在/run/log/journal/中。由于 /run/ 是易失性的,因此日志数据在重新启动时会丢失。为了使数据持久化,创建 /var/log/journal/ 就足够了,systemd-journald 将在其中存储数据。

显然,默认是Fedora 19 中发生了变化(持久存储)并且由于 CentOS 7 源自 Fedora 18 - 默认情况下它仍然是非持久的。默认情况下,持久性是在journald之外通过rsyslogd(默认运行并从journald获取输入)编写的/var/log/messages轮换版本实现的。/var/log/messages-YYYYMMDD

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

# mkdir /var/log/journal

然后修复权限并重新启动journald,例如通过

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

答案2

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

也可以看看:

相关内容