(编辑:重新设计问题以避免最初与 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
这听起来像是一个已知问题,目前还没有计划修复。请参阅: