在 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
也可以看看: