Linux

為 Supervisor debian 設置 env 變數時出現問題

  • March 18, 2019

我正在使用 supervisorctl 執行程序和環境變數來儲存公共變數。

為了設置環境變數,我使用 /etc/environment。我已添加以下內容作為環境變數:

Foo=Bar

然後我使用以下命令確保環境變數設置正確

echo $Foo
> Bar

這是我嘗試使用 Supervisor 執行的範常式序:

echo $Foo
while :
   do
       sleep 10s
       echo "I have completed"
done

當我直接執行程序時,它的工作變數正確:

sh /home/data/trial.sh
> Bar
 I have completed

我已經Trial.conf在我的/etc/supervisor/conf.d/目錄中添加了。這是我的Trial.conf

[program:Trial]
command = sh /home/data/trial.sh

當我使用 supervisorctl 執行程序時

supervisor> start Trial
Trial: started
supervisor> fg Trial

I have completed

我找到了一些為 supervisorctl 設置本地環境變數的解決方案

我嘗試了以下方法:

[supervisord]
environment=Foo="%(ENV_Foo)s"

但是當我重新啟動主管並啟動主管時,我收到了這個錯誤:

unix:///var/run/supervisor.sock no such file

我注意到的一種行為是,當我使用 sudo 時,我無法訪問我的環境變數:

echo $Foo
> Bar
sudo echo $Foo
> 

為此,我找到了一個sudo -E su為 root 保留 $Foo 的解決方案。

**問題:**如何讓 Supervisor 訪問我的本地環境變數?

您不應該試圖讓 supervisord 讀取您使用者的環境變數。相反,您應該告訴 supervisord 在其配置中使用什麼環境變數。

環境變數不會持續重啟,每次啟動或啟動 shell 時都需要設置它們。

請記住,使用者可能會看到其他使用者的環境變數,因此不要在其中儲存任何敏感資訊(如密碼)。使用適當保護的配置文件。

引用自:https://serverfault.com/questions/958752