我正在尝试学习基本的 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)
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尽管分裂是在默认情况下打开-看SplitMode的man 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
在 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 开始支持该语法。
| 归档时间: |
|
| 查看次数: |
18338 次 |
| 最近记录: |