systemd 服务标准输出未完全被 systemd 日志捕获

systemd 服务标准输出未完全被 systemd 日志捕获

我有一个简单的 systemd 服务(称为“testpath”),它只是打印一些要由日志捕获的输出。日志会间歇性地、不可预测地丢失部分输出。这种行为似乎非常不稳定,测试用例又如此微不足道,很难看出这可能是任何一种预期行为。

有人能解释一下 systemd 的预期行为吗?如果做不到,有人能建议一个策略来尝试将其作为一个错误隔离吗?

该服务只需运行此脚本:

% cat ~/tmp/testpath.bin 
#!/bin/bash

sleep 0.1
ps -p $$
echo Echo statement.

预期的行为是每次系统调用时,psecho输出都应出现在日志中。但实际上,输出ps可能出现一半的时间,而输出echo可能出现 90% 的时间。例如,手动运行systemctl --user start testpath会产生此日志:

% journalctl --user -u testpath.service --follow
<some lines elided>
Oct 30 00:47:36 skierfe systemd[1518]: Started Testpath service.
Oct 30 00:47:36 skierfe testpath.bin[862530]:     PID TTY          TIME CMD
Oct 30 00:47:36 skierfe testpath.bin[862530]:  862527 ?        00:00:00 testpath.bin
Oct 30 00:47:36 skierfe testpath.bin[862527]: Echo statement.
Oct 30 00:53:17 skierfe systemd[1518]: Started Testpath service.
Oct 30 00:53:17 skierfe testpath.bin[863505]: Echo statement.
Oct 30 00:53:20 skierfe systemd[1518]: Started Testpath service.
Oct 30 00:53:21 skierfe testpath.bin[863545]: Echo statement.
Oct 30 00:53:23 skierfe systemd[1518]: Started Testpath service.
Oct 30 00:53:23 skierfe testpath.bin[863553]: Echo statement.
Oct 30 00:53:26 skierfe systemd[1518]: Started Testpath service.
Oct 30 00:53:26 skierfe testpath.bin[863558]: Echo statement.
Oct 30 00:53:28 skierfe systemd[1518]: Started Testpath service.
Oct 30 00:53:33 skierfe systemd[1518]: Started Testpath service.
Oct 30 00:53:33 skierfe testpath.bin[863577]:     PID TTY          TIME CMD
Oct 30 00:53:33 skierfe testpath.bin[863577]:  863574 ?        00:00:00 testpath.bin
Oct 30 00:53:33 skierfe testpath.bin[863574]: Echo statement.
Oct 30 00:53:37 skierfe systemd[1518]: Started Testpath service.
Oct 30 00:53:37 skierfe testpath.bin[863579]: Echo statement.

单元文件:

skierfe:(f)..config/systemd/user % cat ~/.config/systemd/user/testpath.service
[Unit]
Description = Testpath service

[Service]
ExecStart = %h/tmp/testpath.bin

我考虑过或尝试过的事情(均无帮助):

  • 系统资源争用:否,新的 Core i5 系统负载较低
  • 每个速率限制参数#774809:没有,RateLimitInterval并且RateLimitBurst在 /etc/systemd/journald.conf 中被注释掉,而且日志记录率无论如何都是微不足道的
  • 延长或删除sleep命令(时间问题?)
  • 将服务更改为Type=oneshot
  • 设置显式StandardOutput=journal#1089887

这些都没有改变行为。

我使用的是 x86_64 Ubuntu 22.04,带有最新软件包更新。

skierfe:(f)~/tmp % systemd --version
systemd 249 (249.11-0ubuntu3.6)
+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT +GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 -PWQUALITY -P11KIT -QRENCODE +BZIP2 +LZ4 +XZ +ZLIB +ZSTD -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified

相关内容