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


26

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

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

考虑示例服务文件chatty.service

[Service]
ExecStart=/usr/bin/echo "test from chatty.service"

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

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.

而且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

用户服务单元似乎没有以某种方式集成在一起,这是预期的吗?我是否缺少某些东西?还是一个错误?

我正在运行带有systemd 208的openSUSE 13.1 x86-64(默认安装)。


在Arch Linux上,相同的systemd 208。您可以用来journalctl --user --user-unit chatty从systemd获取这些开始/停止消息,但至少在我的情况下,不能从echo过程中获得输出。您可以使用journalctl --user或使用其他过滤器来获取回显的消息。
lilydjwg 2014年

Answers:


20

使用--user-unit选项,就您而言...

journalctl --user-unit chatty

您是否还在日志输出中得到“来自chatty.service的测试”标准输出消息,或者仅仅是“ Starting chatty.service ...”和“ Started chatty.service”。讯息?
Quantumboredom 2014年

是的,我也能够从流程中获取输出(即“来自chatty.service的测试”消息)。
elynnaie 2014年

这也是我所期望的,但是我在这里看不到。请问您正在运行什么操作系统(带有版本)?
Quantumboredom 2014年

Arch Linux 3.13.7-1。systemd版本212
elynnaie

2
我现在在主journalctl中看到输出。但是,当我尝试跑步时,journalctl --user我得到了,No journal files were found.并且journalctl --user-unit chatty对我没有用。
CMCDragonkai 2014年

6

Necroposting,但我今天面对并解决了同样的问题。很可能journalctl --user-unit chatty对您不起作用,因为您是从根目录运行它的。然而,每man journalctl--user-unit过滤日志不仅条目_SYSTEMD_USER_UNIT=,而且通过_UID=,并没有chatty服务与根的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.confsudo systemctl restart systemd-journald

或者,使用 sudo journalctl _SYSTEMD_USER_UNIT=chatty.service

有关更多详细信息,请访问 https://lists.freedesktop.org/archives/systemd-devel/2016-October/037554.html


2
谢谢。我在No journal files were opened due to insufficient permissions.设置权限时遇到了令人困惑的“提示”,但是我不必设置权限,因为我正在尝试访问用户日志,而不是系统日志。您的修复成功了。非常感谢。
罗尔夫

3

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

journalctl --user-unit chatty

自systemd v230起,您现在可以将 --user--unit按期望的方式和标志:

journalctl --user --unit chatty

--user --unit自Ubuntu 17.10起支持该语法。


2
我不能在v230上使用“ --user --unit”功能...在此处运行v232,并且此功能不起作用
LeGEC
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.