在哪里/为什么没有普通用户 systemd 服务的日志?

Qua*_*dom 41 systemd

我正在尝试学习基本的 systemd 用法,但遇到了用户服务单元令人困惑的问题。

当使用systemctl start some.service运行普通服务时,我可以通过运行sudo journalctl --unit some.service找到该服务的完整日志(包括它打印到 stdout / stderr 的内容,据我所知)。

考虑示例服务文件chatty.service

[Service]
ExecStart=/usr/bin/echo "test from chatty.service"
Run Code Online (Sandbox Code Playgroud)

当我将此服务文件放在~/.config/systemd/user/chatty.service并使用systemctl --user start chatty.service运行它时,我无法在 journalctl 中找到发送到 stdout 的输出,无论是使用普通的journalctl还是使用journalctl - -用户。我只在两者中得到以下输出:

Jan 15 19:16:52 qbd-x230-suse.site systemd[1168]: Starting chatty.service...
Jan 15 19:16:52 qbd-x230-suse.site systemd[1168]: Started chatty.service.
Run Code Online (Sandbox Code Playgroud)

并且journalctl --unit chatty.service根本不返回任何内容(有或没有 --user 没有区别)。

如果我将相同的服务文件移动到/etc/systemd/system并使用sudo systemd start chatty.service运行它,那么当我运行sudo journalctl --unit chatty.service时,我会得到以下输出:

Jan 15 19:28:08 qbd-x230-suse.site systemd[1]: Starting chatty.service...
Jan 15 19:28:08 qbd-x230-suse.site systemd[1]: Started chatty.service.
Jan 15 19:28:08 qbd-x230-suse.site echo[27098]: test from chatty.service
Run Code Online (Sandbox Code Playgroud)

似乎用户服务单元以某种方式没有很好地集成,这是预期的,我是否遗漏了什么或者是一个错误?

我正在使用 systemd 208(默认安装)运行 openSUSE 13.1 x86-64。

小智 31

使用--user-unit选项,在你的情况下......

journalctl --user-unit chatty
Run Code Online (Sandbox Code Playgroud)

  • 我现在在主 journalctl 中看到输出。但是当我尝试运行 `journalctl --user` 时,我得到 `No journal files are found.` 而 `journalctl --user-unit chatty` 对我不起作用。 (2认同)
  • 直观的是`--user -u`,但不是...... (2认同)

ars*_*ars 13

Necroposting,但我今天面临并解决了同样的问题。很可能journalctl --user-unit chatty对您不起作用,因为您从 root 运行它。但是, per man journalctl--user-unit不仅通过_SYSTEMD_USER_UNIT=,还通过过滤日志条目_UID=,并且没有chattyroot 的uid 的服务,因此找不到条目。

您很可能也尝试journalctl --user-unit chatty从您的常用用户运行,但得到了No journal files were found. 这是因为(和所有用户有权访问他们的私人每个用户的期刊man journalctl这里可以混淆)在2018年对我的Debian 9 journalctl仍然是默认不持久(Storage=auto/etc/systemd/journald.conf/var/log/journal/不存在),而在非持久模式journald不支持劈柴,所以所有日志在一个地方在最终/run/log/journal尽管分裂是在默认情况下打开-看SplitModeman journald.conf。启用持久性解决了这个问题。

TL; DR:通过将启用持久性Storage=persistent,以/etc/systemd/journald.conf与重装journald sudo systemctl restart systemd-journald

或者,搜索 sudo journalctl _SYSTEMD_USER_UNIT=chatty.service

更多详细信息位于 https://lists.freedesktop.org/archives/systemd-devel/2016-October/037554.html

  • 谢谢你。我收到“由于权限不足,没有打开日志文件。”关于设置权限的“提示”令人困惑,但我不必设置权限,因为我正在尝试访问用户日志,而不是系统日志。你的修复成功了。非常感谢。 (2认同)

Mar*_*erg 7

在 systemd v230 之前,您必须使用不太直观的--user-unit标志来查看用户设备的日志:

journalctl --user-unit chatty
Run Code Online (Sandbox Code Playgroud)

从 systemd v230 开始,您现在可以按照预期组合--user和标志:--unit

journalctl --user --unit chatty
Run Code Online (Sandbox Code Playgroud)

--user --unit从 Ubuntu 17.10 开始支持该语法。

  • 我不确定“--user --unit”功能是否适用于 v230 ...在这里运行 v232,并且此功能不起作用 (5认同)