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

max*_*zig 108 centos systemd systemd-journald

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

命令

# journalctl --boot=-1
Run Code Online (Sandbox Code Playgroud)

印刷

Failed to look up boot -1: Cannot assign requested address
Run Code Online (Sandbox Code Playgroud)

并以状态 1 退出。

将它与当前的 Fedora 系统进行比较,我注意到 CentOS 7 没有/var/log/journaljournalctl也没有提供--list-boots)。

因此,我的问题是如何显示在上次启动日期之前写入的日志消息。

或者,也许这个功能必须在 CentOS 7 上启用?

journalctl手册页将“systemd 208”列为版本号。)

max*_*zig 127

tl;博士

在 CentOS 7 上,您必须启用日志消息的持久存储:

# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
Run Code Online (Sandbox Code Playgroud)

否则,不会在两次引导之间保留日志日志消息。

细节

是否journald保留以前启动的日志消息是通过/etc/systemd/journald.conf. CentOS 7 下的默认设置是:

[Journal]
Storage=auto
Run Code Online (Sandbox Code Playgroud)

journald.conf手册页解释auto为:

“volatile”、“persistent”、“auto”和“none”之一。如果“易失”,日志日志数据将仅存储在内存中,即低于 /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 via/var/log/messages/var/log/messages-YYYYMMDD由 rsyslogd(默认运行并从 journald 获取其输入)编写的轮换版本之外实现的。

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

# mkdir /var/log/journal
Run Code Online (Sandbox Code Playgroud)

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

# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
Run Code Online (Sandbox Code Playgroud)

  • 学到了一个巧妙的技巧:如果你发送一个 `USR1` 信号而不是重新启动,你不会丢失当前的日志内容。`killall -USR1 systemd-journald` (10认同)
  • 在 debian 中,这被记录在 `/usr/share/doc/systemd/README.Debian`:`install -d -g systemd-journal /var/log/journal`。 (9认同)
  • `systemctl restart systemd-journald` 应该这样做。所以不需要重启。 (6认同)

Evg*_*gin 5

systemctl restart systemd-journald
Run Code Online (Sandbox Code Playgroud)

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

mkdir /var/log/journal
Run Code Online (Sandbox Code Playgroud)

有一个变化v208

systemd-journald 将不再将其创建的日志文件组调整为“systemd-journal”组。相反,我们依赖“systemd-journal”组拥有的日志目录及其 setgid 位设置,以便内核文件系统层将自动强制日志文件继承此组分配。

systemd 中包含的 tmpfiles.d(5) 片段将确保在日志目录中正确设置 setgid 位和组(如果每次启动时存在日志目录)。

所以,你应该运行类似的systemd-tmpfiles --create --prefix /var/log/journal东西mkdir /var/log/journal

也可以看看