为 Supervisor debian 设置环境变量时出现问题

为 Supervisor debian 设置环境变量时出现问题

我正在使用 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 时进行设置。

请记住,用户可能会看到其他用户的环境变量,因此不要在其中存储任何敏感信息(如密码)。使用适当保护的配置文件。

相关内容