关闭指定 systemd 服务的日志记录

关闭指定 systemd 服务的日志记录

我有一个特定的 systemd 服务,我不希望将其日志记录到journald/journalctl。目前的原因是它已经记录到 syslog(已经轮换),并且journald/journalctl 日志被该服务的日志淹没(磁盘空间问题)。

现在我已经更改了journald/journalctl的配置,这样Storage=volatile它就不会写入磁盘太多。我知道我可以更改SystemMaxUseSystemKeepFreein /etc/systemd/journald.conf,但这并不理想,因为来自其他服务的日志将被该特定服务覆盖。我想继续使用journald/journalctl,但只是不用于该特定服务。

我可以在/etc/systemd/system/myservice.service服务单元文件中更改任何配置,以便它不会记录到journald/journalctl 中吗?

答案1

为您的设备创建一个单独的日志命名空间,并根据需要自定义其日志配置:

/etc/.../myapp.service

[Service]
...
LogNamespace=noisy

为该命名空间创建一个新配置:

cd /etc/systemd
cp journald.conf [email protected]
nano [email protected]

并根据需要编辑配置。例如,我只是将其设置为Storage=volatileRuntimeMaxUse=10M因为我不关心我的应用程序的系统日志日志(我已经有足够的应用程序日志)。注意:当存储是易失性时,它使用Runtime*vars,而不是System*vars。

重新加载并重新启动:

sudo systemctl daemon-reload
sudo systemctl restart myapp # maybe this is not necessary? Lmk if you find out

来源:https://wiki.archlinux.org/title/Systemd/Journal#Per_unit_size_limit_by_a_journal_namespace

答案2

没有任何 systemd 配置允许您禁用服务的日志记录,但仍转发到其他 syslog 守护进程(如 rsyslog)。我在自定义 C++ 程序中看到的做法是绕过日志记录,而是打开与 rsyslog 监视的套接字的直接连接/run/systemd/journal/syslog

答案3

Arch Linux Wiki:Systemd/期刊

在 Arch Linux 中,目录 /var/log/journal/ 是 systemd 包的一部分,日志(当 /etc/systemd/journald.conf 中的 Storage= 设置为 auto 时)将写入 /var/log/杂志/。如果删除该目录,systemd 不会自动重新创建它,而是以非持久方式将其日志写入 /run/systemd/journal。但是,如果在journald.conf中添加Storage=persistent并且重新启动systemd-journald.service(或者重新启动系统),则会重新创建该目录。

所以你所要做的就是重命名 /var/log/journal (或者你的日志存储日志的任何地方),日志不会向磁盘写入任何内容,这种行为经常让我陷入困境,因为我只想去桌面很快,但必须等待日志将日志写入磁盘:)

相关内容