systemctl show没有显示几个属性

时间:2017-04-07 15:23:05

标签: linux systemd systemctl

我正在使用systemctl使用命令systemctl show ssh.service -p EnvironmentFile ssh.service 单元文件中获取 EnvironmentFile 属性的值,但它返回空结果。

单元文件本身包含此属性。例如,我的单元文件如下所示(cat /lib/systemd/system/ssh.service):

[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify

[Install]
WantedBy=multi-user.target
Alias=sshd.service

此外,如果我systemctl show ssh.service | grep EnvironmentFile我得到:

EnvironmentFile=/etc/default/ssh (ignore_errors=yes)

几乎所有其他属性都按预期工作,例如systemctl show ssh.service -p After返回扩展依赖项:

After=network.target auditd.service systemd-journald.socket basic.target sysinit.target system.slice

ConditionPathExists 属性相同的问题,但在这种情况下,即使grep也不显示此属性(systemctl show ssh.service | grep ConditionPathExists不打印任何内容)。

为什么会这样?如何在不使用grep的情况下从单元文件中获取 EnvironmentFile 属性?

2 个答案:

答案 0 :(得分:1)

我已经在systemd 229中复制了缺少EnvironmentFile的问题,并且交叉引用了systemctl的文档以及最新版本{{NEWS的{​​{1}}文件1}}以查看是否有提及此行为的更改。没有。

这似乎是systemd中的错误。在审核systemdsystemctl的文档时,show的文档意味着这将有效。正如你所指出的那样,如果你贪图,那么该物业绝对存在。

我建议您搜索existing open issues for systemd,看看是否已经存在问题。如果没有,请打开一个新的问题报告。

如果行为符合预期,则应更新--property文档以澄清这一点。

答案 1 :(得分:0)

根据Mark Stosberg的建议,我尝试搜索与此问题相关的未解决问题,并且我发现one描述了与环境*属性相关的错误自动完成行为。

使用 busctl 我发现实际的媒体资源名称是 EnvironmentFiles busctl introspect org.freedesktop.systemd1 /org/freedesktop/systemd1/unit/ssh_2eservice | grep EnvironmentFile):

.EnvironmentFiles                   property  a(sb)          1 "/etc/default/ssh" true                const

因此,如果您需要从 systemctl 获取此属性,则必须执行systemctl show -p EnvironmentFiles ssh.service(下面的输出):

EnvironmentFile=/etc/default/ssh (ignore_errors=yes)