Параметр пользователя Supervisor config в разделе программы
у меня есть программа Торнадо, и все относительные Python lib, установленные в некорневом пользователе под названием bob by:
pip install --user xxx
теперь я хочу запустить его в supervisor:
[program:testpro]
command=python /path/to/myfile.py
user=bob ; set the user to bob
redirect_stderr=true
stdout_logfile=/path/to/log
numproces=1
autostart=true
но это не удалось, в статусе supervisorctl:
testpro FATAL Exited too quickly (process log may have details)
Я вижу журнал и считаю, что он не может импортировать относительный Python lib, поэтому он не работает как Боб.
затем я меняю на:
[program:testpro]
command=sudo -u bob -i python /path/to/myfile.py
;user=bob ;comment this
redirect_stderr=true
stdout_logfile=/path/to/log
numproces=1
autostart=true
и он работает нормально
Итак, что же параметр user
делать? и как могу ли я настроить пользователя run-as в опции?
3 ответов
я решил эту проблему:
добавить environment
опции в разделе программы:
environment=HOME="/home/bob",USER="bob"
посмотреть Supervisor doc-среда подпроцесса:
никакая оболочка не выполняется супервизором при запуске подпроцесса, поэтому переменные среды, такие как USER, PATH, HOME, SHELL, LOGNAME и т. д. не изменяются по умолчанию или иным образом переназначаются. Это особенно важно отметить, когда вы запускаете программу из супервизор запускается как root с user= stanza в конфигурации. В отличие от cron, supervisord не пытается угадать и переопределить "фундаментальные" переменные среды, такие как USER, PATH, HOME и LOGNAME когда он выполняет setuid для пользователя, определенного в программе user= опция config. Если вам нужно установить переменные окружения для конкретная программа, которая в противном случае может быть установлена вызовом оболочки для конкретного пользователя, вы должны сделать это явно в экологическая программа опция config. Пример установки этих переменные среды, как показано ниже.
[program:apache2]
command=/home/chrism/bin/httpd -c "ErrorLog
/dev/stdout" -DFOREGROUND user=chrism
environment=HOME="/home/chrism",USER="chrism"
вы можете использовать опцию каталога.
"когда supervisord daemonizes, перейти в этот каталог. Этот параметр может включать значение"
[program:testpro]
command=python /path/to/myfile.py
directory=/path/to/
user=bob ; set the user to bob
redirect_stderr=true
stdout_logfile=/path/to/log
numproces=1
autostart=true
Не забудьте перезапустить сам супервизор, например, с помощью /etc/init.d/supervisord restart
потому что в противном случае ваши изменения conf не будут подобраны, и он будет продолжать запускать вашу службу как root.