2017-04-07 137 views
0

我與systemctl工作,從使用命令systemctl show ssh.service -p EnvironmentFilessh.service單元文件得到EnvironmentFile財產的價值,但它返回空的結果。systemctl顯示不顯示幾個屬性

單位文件本身包含此屬性。例如我的單元文件看起來像這樣(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

回答

1

我在systemd 229再現的問題與缺失EnvironmentFile和交叉引用爲systemctl文檔以及從systemd最新發布的NEWS文件,看看是否有被改變了這種行爲提到。那沒有。

這似乎是systemd中的一個錯誤。 systemctl的文檔意味着這將在查看show--property的文檔時起作用。正如你所指出的,如果你喜歡它,那麼這個屬性絕對存在。

我鼓勵你通過existing open issues for systemd進行搜索,看是否有一個已經是公開的問題這一點。如果沒有,請打開一份新的問題報告。

如果行爲按預期工作,則應更新man systemctl文檔以闡明該行爲。

0

正如Mark Stosberg所示,我試圖搜索與此問題相關的未解決的問題,並且我找到了one,它描述了有關Environment *屬性的錯誤自動填充行爲。

使用busctl我發現,實際的屬性名稱是EnvironmentFilesbusctl 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)