我有一个特定的 systemd 服务,我不希望将其日志记录到journald/journalctl。目前的原因是它已经记录到 syslog(已经轮换),并且journald/journalctl 日志被该服务的日志淹没(磁盘空间问题)。
现在我已经更改了journald/journalctl的配置,这样Storage=volatile
它就不会写入磁盘太多。我知道我可以更改SystemMaxUse
和SystemKeepFree
in /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=volatile
,RuntimeMaxUse=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 中,目录 /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 (或者你的日志存储日志的任何地方),日志不会向磁盘写入任何内容,这种行为经常让我陷入困境,因为我只想去桌面很快,但必须等待日志将日志写入磁盘:)