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

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

У меня много проблем с тем, чтобы супервизор запускал мои команды с расширенными переменными среды.

Мой супервайзер конф.

; supervisor config file

[unix_http_server]
file=/var/run//supervisor.sock   ; (the path to the socket file)
chmod=0700                       ; sockef file mode (default 0700)

[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)
user = a-user-name
environment = HOME='/home/a-user-name',APP='staging.example.com',SYMFONY_ENVIRONMENT='staging'

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run//supervisor.sock ; use a unix:// URL  for a unix socket

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

[include]
files = /etc/supervisor/conf.d/*.conf
files = /home/a-user-name/apps/staging.example.com/current/app/Resources/config/supervisor/*.conf

И under-version-control.conf в ~/apps/staging.example.com/current/app/Resources/config/supervisor

[program:hank-message-forwarder]
stdout_logfile = /var/log/pink-tie/%(program_name)s-out.log
stderr_logfile = /var/log/pink-tie/%(program_name)s-err.log
logfile_maxbytes = 50MB
logfile_backups = 10
identifier = hank-message-forwarder
command = %(ENV_HOME)s/apps/%(ENV_APP)s/current/bin/hank forward-messages tcp://*:5500 tcp://*:5600

Что я здесь делаю не так? Ошибка, которую я получаю, совершенно бесполезна. Он жалуется на то, что не может подключиться к серверу unix, но как только я удалю files, user и environment директива (все, что я изменил в основном) все возвращается в норму.

но как только я удалю files, user и environment директива (все, что я изменил в основном) все возвращается в норму.

Похоже, у вас проблема с синтаксисом. После ссылки онлайн-документация... user запись выглядит хорошо. user = a-user-name Но environment мне кажется странным. Попробуйте заменить одинарные кавычки на двойные.

Измените это с этого;

environment = HOME='/home/a-user-name',APP='staging.example.com',SYMFONY_ENVIRONMENT='staging'

К этому;

environment = HOME="/home/a-user-name",APP="staging.example.com",SYMFONY_ENVIRONMENT="staging"

РЕДАКТИРОВАТЬ:

Я только что заметил у вас звездочку в одном из "files="линии. Этого я раньше не видел на практике (Я указал только полные имена файлов). Но в онлайн-документации есть символы подстановки («*» и «?»).

Однако в онлайн-документации упоминается следующее (выделено мной);

Если файл конфигурации содержит [include] раздел, он должен содержать единственный ключ названный “files”. Значения в этом ключе указывают другие файлы конфигурации, которые будут включены в конфигурацию.

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

Итак, вопрос к вам: supervisord работает от имени пользователя root или пользователя с более низкими привилегиями?