我最近了解到它journalctl
占用了我的 16GB SD 卡(Raspberry Pi)的很大一部分:
$ journalctl --disk-usage
Archived and active journals take up 312.1M in the file system.
我没有这种感觉journalctl
并且journald
是尽其所能在我的这台机器的用例中。这是一个老式的 RPi,并且rsyslog
也在运行。我估计我的需要和使用journalctl
可能是“千载难逢”。因此,我决定禁用journald
- which “feeds” journalctl
。我认为这很简单,使用systemctl
to stop
,或者可能只是disable
ing systemd-journald.service
,这样它就不会在下次启动时启动。
在拔掉插头之前,我决定做一些研究。没有找到数千个提供“操作方法”建议的参考资料,而是针对我的特定搜索词的结果非常少:“如何禁用日志”。相反,结果主要提供了减少的journald
建议资源消耗。我确实找到了一些让我犹豫的参考资料:
journald
ArchLinux 论坛中的一个旧帖子表明,如果没有的话就不可能禁用反响;即"Masking systemd-journald causes all kinds of dependency failures and drops you at an emergency prompt."
但是这篇文章已经有 10 年历史了......
这systemd-journald.服务手册说,"stopping it [systemd-journald.service] is not recommended."
。文档从那里开始讨论命名空间?
我了解到阻止systemd
单位启动的常用命令没有效果;即正常启动:
$ sudo systemctl disable systemd-journald.service
$ sudo reboot
# ... and after boot & login:
$ systemctl status systemd-journald.service
● systemd-journald.service - Journal Service
Loaded: loaded (/lib/systemd/system/systemd-journald.service; static)
Active: active (running) since Fri 2022-06-03 07:30:29 UTC; 1min 59s ago
TriggeredBy: ● systemd-journald-audit.socket
● systemd-journald.socket
● systemd-journald-dev-log.socket
Docs: man:systemd-journald.service(8)
man:journald.conf(5)
Main PID: 134 (systemd-journal)
Status: "Processing requests..."
Tasks: 1 (limit: 1598)
CPU: 820ms
CGroup: /system.slice/systemd-journald.service
└─134 /lib/systemd/systemd-journald
...
$
怎样才能journald
被禁用呢? ...或者可以禁用它吗?
如果不是,systemd
开发者为什么要强迫用户这样做? (好吧,是的 - 征求意见,所以忘记问题的这一部分。)
答案1
之所以不想journald
在使用的时候消除rsyslogd
是因为rsyslogd
可以得到它的信息从日记,他们以这种方式一起玩得很好。
这有点与此处评论中链接的一些问答相反。在当前的 Linux 系统上对此进行了一些观察(在 Fedora 和 Debian 上检查了这一点),该系统配置为让日志仅使用易失性(内存中)存储,并rsyslog
写入实际的日志文件:
/var/run/log
是一个带有一个子目录的目录,journal
.这包含由systemd-journald
和写入的文件阅读者rsyslogd
。请注意,此目录位于tmpfs
分区上,因此它算作内存易失性存储。/dev/log
是到 的符号链接/run/systemd/journal/dev-log
。
这些系统上的/etc/rsyslog.conf
包括这个(不是库存rsyslog.conf
):
# Input
module (
load="imjournal"
...
)
Fedora 和 Debian 的不同之处在于这里的库存配置;前者确实使用imjournal
以及imuxsock
(用户空间套接字)。1 Debian 使用imuxsock
and imklog
(内核日志),大概是因为没有imjournal
它需要监听内核本身。我还认为这有点不合时宜。
我的部分观点是,完全删除日志记录可能并非不可能,但这是一个坏主意。它是当代基于 systemd 的系统的核心组件。它的缺陷是它可能比 rsyslog 使用更多的磁盘空间,但这很容易通过使用Storage=volatile
和 (例如)RuntimeMaxUse=64M
in进行配置/etc/systemd/journald
,
从journald 获取rsyslogd 是一种后端/前端关系; rsyslog 很棒,因为它提供纯文本日志记录以及对记录内容、记录位置和方式的更细粒度控制,而 Journald 提供与系统服务更好的集成。
- rsyslog 建议使用
imuxsock
asimuxjournal
效率较低,并且可能会遇到其他问题;另请参阅安德鲁·亨利对此的回答和下面的评论。
答案2
如何禁用日志记录?
首先,这就是Rsyslogd 文档介绍了imjournal
用于从 systemd 日志获取日志消息的模块(粗体是原创,斜体是我的强调):
请注意,该模块读取日志数据库,什么被认为是相对性能密集的操作。因此,利用该模块的配置的性能可能是比使用 imuxsock 时明显慢。该日志为 imuxsock 提供了所有“经典”系统日志消息的副本,但是,它不提供结构化数据。仅当需要结构化数据时,才必须使用 imjournal。 否则,imjournal 可能会被 imuxsock 取代,我们强烈建议这样做。
我们建议查看有关 rsyslog 日志集成的简短演示,以了解预期用例的更多详细信息。
警告:某些版本的 systemd 日志存在数据库损坏问题,这导致日志在紧密循环中无休止地返回相同的数据。这会导致 rsyslog 内出现大量消息重复,当系统资源耗尽时,可能会导致拒绝服务。通过使用适当的速率限制器可以在一定程度上缓解这种情况,但即使如此,旧数据也会出现无休止重复的峰值。默认情况下,速率限制已激活,并允许在 10 分钟内处理 20,000 条消息,这对于大多数用例来说应该足够了。如果不够,请使用下述参数调整允许的音量。强烈建议仅在确实需要时才使用此插件。
您是否有“迫切需要”向 rsyslog 提供“结构化数据”?这样做时会使用更多的 CPU 周期,但速度会慢很多吗?
用直接 rsyslog 替换 systemd 的日志很容易:
编辑
/etc/rsyslog.conf
。删除所有对imjournal
和 的引用imuxsock
。将上面的行替换为
module(load="imuxsock" # provides support for local system logging (e.g. via logger command)
SysSock.Use="on") # Turn on message reception via local log socket;
运行以下命令:
systemctl stop systemd-journal-flush.service systemd-journald.service systemd-journald-dev-log.socket systemd-journald.socket
跑步
systemctl stop systemd-journal-flush.service systemd-journald.service systemd-journald-dev-log.socket systemd-journald.socket
跑步
systemctl restart rsyslog
验证消息出现在
/var/log/messages
等人
您可能需要调整其中一些命令 - 特别是通过禁用更多 systemd 服务。
答案3
禁用此服务不会阻止您的设备运行,但日志记录将明显停止。我没有看到其他问题。