Я использую 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 имел доступ к моим локальным переменным среды?
Вы не должны пытаться заставить супервизора читать переменные среды вашего пользователя. Вместо этого вы должны указать супервизору, что использовать для переменных среды в его конфигурации.
Переменные среды не сохранятся при перезагрузке, их нужно устанавливать каждый раз при загрузке или запуске оболочки.
Помните, что пользователи могут видеть переменные среды других пользователей, поэтому не храните в них ничего важного (например, пароли). Используйте правильно защищенный файл конфигурации.