0

我正在使用该命令从ssh.service单元文件中获取EnvironmentFile属性的systemctl值,但它返回空结果。systemctl show ssh.service -p 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打印任何内容)。

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

4

2 回答 2

1

我已经重现了EnvironmentFilesystemd 229 中缺少的问题,并交叉引用了最新版本的文档systemctl和文件,以查看是否有提及此行为正在更改。那没有。NEWSsystemd

这似乎是systemd. 的文档systemctl意味着在查看 和 的文档时这将show起作用--property。正如您所指出的,如果您 grep,该属性肯定存在。

我鼓励您搜索systemd 的现有未解决问题,以查看是否已经存在未解决的问题。如果没有,请打开一个新的问题报告。

如果行为按预期工作,man systemctl则应更新文档以澄清这一点。

于 2017-04-07T16:38:25.493 回答
1

正如Mark Stosberg所建议的,我试图搜索与此问题相关的未解决问题,并且我发现了一个描述与 Environment* 属性有关的错误自动完成行为的问题。

使用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)
于 2017-04-08T11:27:23.300 回答