我正在使用 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 访问我的本地环境变量?
答案1
您不应该尝试让 Supervisord 读取用户的环境变量。您应该告诉 Supervisord 在其配置中使用什么环境变量。
环境变量不会在重启后保留,它们需要在每次启动或启动 shell 时进行设置。
请记住,用户可能会看到其他用户的环境变量,因此不要在其中存储任何敏感信息(如密码)。使用适当保护的配置文件。