Systemd 错误?当指定非 root 用户时,Stdout 未标记为属于单元

Systemd 错误?当指定非 root 用户时,Stdout 未标记为属于单元

(编辑:重新设计问题以避免最初与 syslog 混淆)

一些奇怪的 systemd 行为,我想确认这是错误、文档失败还是 PEBCAK。

考虑一个以 root 身份运行的非常简单的单元:

# cat > /etc/systemd/system/testecho.service <<EOF
[Service]
Type=oneshot
ExecStart=/bin/echo 'Hello world'
User=root
EOF
# systemctl daemon-reload

使用User=root(或未User指定的)标准输出转到标记为单位的日志,正如人们所期望的那样:

# journalctl -u testecho -f &
# systemctl start testecho
Jan 21 19:37:33 atlassian-app01.phx7.llnw.com systemd[1]: Starting testecho.service...
Jan 21 19:37:33 atlassian-app01.phx7.llnw.com echo[13479]: Hello world
Jan 21 19:37:33 atlassian-app01.phx7.llnw.com systemd[1]: Started testecho.service.

然而,当以任何非 root 用户身份运行服务时,例如nobody,stdout 是不是标记为单位的,如果journalctl使用以下命令运行,则不会出现-u

# cat > /etc/systemd/system/testecho.service <<EOF
[Service]
Type=oneshot
ExecStart=/bin/echo 'Hello world'
User=nobody
EOF
# systemctl daemon-reload
# journalctl -u testecho -f &
# systemctl start testecho
Jan 21 19:38:56 atlassian-app01.phx7.llnw.com systemd[1]: Starting testecho.service...
Jan 21 19:38:56 atlassian-app01.phx7.llnw.com systemd[1]: Started testecho.service.

实际上,stdout 会转到日志,但没有 _SYSTEMD_UNIT 标签。可以通过省略以下内容来查看 Stdout -u testunit

# journalctl -f &
systemctl start testecho
# systemctl start testecho
Jan 21 19:42:04 atlassian-app01.phx7.llnw.com systemd[1]: Starting testecho.service...
Jan 21 19:42:04 atlassian-app01.phx7.llnw.com echo[13719]: Hello world
Jan 21 19:42:04 atlassian-app01.phx7.llnw.com systemd[1]: Started testecho.service.

这也可以通过运行来确认journalctl -o json-pretty -f。当User=非根时,没有"_SYSTEMD_UNIT" : "testecho.service"字段。

文档标准输出=更不用说基于的魔法方差User,文档也没有用户=. 他们所说的只是StandardOutput继承DefaultStandardOutput,并且默认为journal

我是不是漏掉了什么?我注意到,无论User

我分别在 Ubuntu 16.04 和 16.10 上运行的 systemd 229 和 231 上看到了这种情况。

谢谢!

答案1

这听起来像是一个已知问题,目前还没有计划修复。请参阅:

相关内容