是否可以為某些服務導出環境變數?
說我有兩個服務,它們是在系統(Ubuntu 16.04.3)啟動時自動啟動兩個程序。
一份服務文件:
[Unit] Description=service 1 Requires=init_mdc.service After=rc.local.service init_mdc.service [Service] ExecStart=someCmd ExecReload=someCmd KillMode=process Restart=on-failure Type=simple
另一個服務文件:
[Unit] Description=service 2 Requires=init_mdc.service After=rc.local.service init_mdc.service [Service] ExecStart=someCmd2 ExecReload=someCmd2 KillMode=process Restart=on-failure Type=simple
這兩個服務需要一些相同的環境變數。
目前我的解決方案並不好,因為這
someCmd
兩個服務的 s 是兩個不同的 bash 腳本,我在其中設置了相同的 env 變數。我在想是否可以以某種方式在某個地方設置一些環境變數,以便兩個服務可以共享它們,換句話說,我只想設置環境變數一次,而不是兩次。
我試圖從
/etc/profile
, from導出這些環境變數/etc/rc.local
,但它們不起作用。我認為這是因為系統先執行我的兩個服務,然後再/etc/profile
被/etc/rc.local
系統讀取。有沒有辦法讓我為多個服務文件設置一些環境變數?我知道我們可以在服務文件中設置導入一些環境變數,但我不喜歡這樣,因為我仍然需要為每個服務服務
EnvironmentFile=XXX
設置多次…EnvironmentFile=XXX
使用
EnvironmentFile=
是要走的路。我不明白您必須多次設置它的意思…您必須從需要這些變數的每個服務中設置一次…
服務一:
[Unit] Description=service 1 [Service] ExecStart=someCmd EnvironmentFile=/path/to/common.env ...
服務二:
[Unit] Description=service 2 [Service] ExecStart=someCmd2 EnvironmentFile=/path/to/common.env ...
並將所有
VAR=VALUE
設置保存在文件中/path/to/common.env
。環境文件的語法與 shell 腳本的語法兼容,因此您甚至可以在您的
.bash_profile
# ~/.bash_profile if [ -f /path/to/common.env ]; then . /path/to/common.env fi
一種替代方法是在 PID 1 中使用
systemctl set-environment
或systemctl import-environment
設置全域環境變數。(請參閱此處的文件。)您可能仍需要
PassEnvironment=
在特定服務中導出這些變數,但在這種情況下,您只需列出變數名稱。我真的不認為這是最好的解決方案,但我認為
EnvironmentFile=
它更加獨立、優雅且適合您的案例。