Параметр пользователя 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.