我正在使用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 属性?
答案 0 :(得分:1)
我已经在systemd 229中复制了缺少EnvironmentFile
的问题,并且交叉引用了systemctl
的文档以及最新版本{{NEWS
的{{1}}文件1}}以查看是否有提及此行为的更改。没有。
这似乎是systemd
中的错误。在审核systemd
和systemctl
的文档时,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)