Назад | Перейти на главную страницу

Проблема с установкой переменной env для Debian Supervisor

Я использую 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 что сохранит $ Foo для root.

Вопрос: Как я могу сделать так, чтобы Supervisor имел доступ к моим локальным переменным среды?

Вы не должны пытаться заставить супервизора читать переменные среды вашего пользователя. Вместо этого вы должны указать супервизору, что использовать для переменных среды в его конфигурации.

Переменные среды не сохранятся при перезагрузке, их нужно устанавливать каждый раз при загрузке или запуске оболочки.

Помните, что пользователи могут видеть переменные среды других пользователей, поэтому не храните в них ничего важного (например, пароли). Используйте правильно защищенный файл конфигурации.