Como posso ter o Supervisor executando meus programas como outro usuário?

6

Estou tendo muitos problemas para fazer com que o supervisor execute meus comandos com variáveis de ambiente expandidas.

Meu supervisor conf.

; 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

E under-version-control.conf em ~/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

O que estou fazendo de errado aqui? O erro que estou recebendo não é útil em tudo. Ele está reclamando sobre o fato de que ele não pode se conectar ao servidor unix, mas depois que eu removo a diretiva files , user e environment (tudo o que eu mudei basicamente) tudo volta ao normal.

    
por Marijn Huizendveld 08.08.2013 / 19:29

2 respostas

8

but once I remove the files, user and environment directive (all that I've changed basically) all goes back to normal.

Parece que você tem um problema de sintaxe. Depois de fazer referência à documentação on-line ... A entrada user parece boa. %código% Mas o user = a-user-name parece estranho para mim. Tente alterar suas aspas simples para aspas duplas.

Altere-o disto

environment

Para isso

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

EDITAR:

Acabei de notar que você tem um asterisco em uma das suas linhas " environment = HOME="/home/a-user-name",APP="staging.example.com",SYMFONY_ENVIRONMENT="staging" ". Isso eu não vi antes na prática (eu apenas especifiquei nomes completos de arquivos). Mas a documentação online mostra curingas ("*" e "?").

No entanto, a documentação on-line menciona o seguinte (ênfase adicionada);

If the configuration file contains an [include] section, it must contain a single key named “files”. The values in this key specify other configuration files to be included within the configuration.

    
por 21.08.2013 / 18:08
0

Sem realmente olhar em detalhes. Um pensamento veio à mente. Você não pode executar um processo como outro usuário, a menos que esse usuário tenha privilégios suficientes para fazer isso.

Então, a questão é para você, o supervisord está sendo executado como root ou como um usuário com privilégios mais baixos?

    
por 25.08.2013 / 23:32