2016-02-16 127 views
11

systemd單元文件中設置PATH變量的正確方法是什麼? 看過幾個例子後,我試着使用下面的格式,但這個變量似乎沒有擴展。systemd:「環境」指令設置路徑

Environment="PATH=/local/bin:$PATH" 

我在CoreOS上用systemd的下面的版本來試試這個。

systemd 225 
-PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT -GNUTLS -ACL +XZ -LZ4 +SECCOMP +BLKID -ELFUTILS +KMOD -IDN 

回答

16

您不能在Environment指令中使用EnvVars。整個Environment=將被忽略。如果你使用EnvironmentFile=,那麼指定的文件將被加載而不用替換。所以PATH=/local/bin:$PATH應該是,確切地說那,這可能不是你想要的。

在CentOS7下面的作品。

# /etc/systemd/system/nagios.service.d/env.conf 
[Service] 
Environment="PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin" 

> sudo systemctl daemon-reload 
> sudo systemctl restart nagios 
> sudo cat /proc/28647/environ 
... 
PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin 
... 
+0

這適用於我,唯一的例外是我的PATH前綴爲'/ bin',並且這打破了設置我的自定義PATH的目的。也就是說,如果我添加'Environment =「PATH = foo:bar」'我的服務最終得到了'PATH =/bin:foo:bar'。 – Xabs

+0

Juts將我的註釋轉換爲正確的問題:http://stackoverflow.com/questions/39576006/systemd-prepending-bin-to-environment-path – Xabs

+0

這個答案適用於設置PATH('Environment =「PATH =/local/bin'),但是不附加/在PATH之前('Environment =「PATH =/local/bin:$ PATH」'),對吧? –

1

可以使用EnvironmentFile=指令在units段來設置環境變量。

只要把變量作爲key=value對,它會工作。

運行時只是'source'指定的任何文件。

您可以使用write_files指令創建文件。