Come posso eseguire supervisord senza usare root?


8

Mi sembra di avere difficoltà a capire perché Supervord non funzionerà come utente non root. Se lo avvio con l'utente impostato su jason (pid 1000), ottengo quanto segue nel file di registro:

2010-05-24 08:53:32,143 CRIT Set uid to user 1000
2010-05-24 08:53:32,143 WARN Included extra file "/home/jason/src/tsched/celeryd.conf" during parsing
2010-05-24 08:53:32,189 INFO RPC interface 'supervisor' initialized
2010-05-24 08:53:32,189 WARN cElementTree not installed, using slower XML parser for XML-RPC
2010-05-24 08:53:32,189 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2010-05-24 08:53:32,190 INFO daemonizing the supervisord process
2010-05-24 08:53:32,191 INFO supervisord started with pid 3444

... quindi il processo muore per qualche motivo sconosciuto. Se lo avvio senza sudo (sotto l'utente Jason), ottengo un output simile:

2010-05-24 08:51:32,859 INFO supervisord started with pid 3306
2010-05-24 08:52:15,761 CRIT Can't drop privilege as nonroot user
2010-05-24 08:52:15,761 WARN Included extra file "/home/jason/src/tsched/celeryd.conf" during parsing
2010-05-24 08:52:15,807 INFO RPC interface 'supervisor' initialized
2010-05-24 08:52:15,807 WARN cElementTree not installed, using slower XML parser for XML-RPC
2010-05-24 08:52:15,807 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2010-05-24 08:52:15,808 INFO daemonizing the supervisord process
2010-05-24 08:52:15,809 INFO supervisord started with pid 3397

... e ancora non funziona. Se è di aiuto, ecco il file supervisord.conf che sto usando:

[unix_http_server]
file=/tmp/supervisor.sock   ; path to your socket file

[supervisord]
logfile=./supervisord.log ; supervisord log file
logfile_maxbytes=50MB       ; maximum size of logfile before rotation
logfile_backups=10          ; number of backed up logfiles
loglevel=debug ; info, debug, warn, trace
pidfile=./supervisord.pid ; pidfile location
nodaemon=false              ; run supervisord as a daemon
minfds=1024                 ; number of startup file descriptors
minprocs=200                ; number of process descriptors
user=jason ; default user
childlogdir=./supervisord/            ; where child log files will live


[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use unix:// schem for a unix sockets.

[include]

# Uncomment this line for celeryd for Python
files=celeryd.conf

# Uncomment this line for celeryd for Django.
;files=django/celeryd.conf

... ed ecco celeryd.conf:

[program:celery]
command=bin/celeryd --loglevel=INFO --logfile=./celeryd.log

environment=PYTHONPATH='./tsched_worker',
            JIVA_DB_PLATFORM='oracle',
            ORACLE_HOME='/usr/lib/oracle/xe/app/oracle/product/10.2.0/server',
            LD_LIBRARY_PATH='/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib',
            TNS_ADMIN='/home/jason',
            CELERY_CONFIG_MODULE='tsched_worker.celeryconfig'

directory=.
user=jason
numprocs=1
stdout_logfile=/var/log/celeryd.log
stderr_logfile=/var/log/celeryd.log
autostart=true
autorestart=true
startsecs=10

; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600

; if rabbitmq is supervised, set its priority higher
; so it starts first
priority=998

Qualcuno può aiutarmi a capire cosa sta succedendo?


Sei mai arrivato al fondo di questo?
Michael Waterfall,

Risposte:


2

Prova a commentare questo parametro. Se non si specifica un utente, dovrebbe essere eseguito con lo stesso ID utente che ha avviato il processo.

user=jason ; default user

1

Sono molto nuovo per me stesso come supervisore, ma sto anche cercando di farlo funzionare con sedano. Per ora sono contento che supervisord sia in esecuzione come root in quanto viene eseguito con uno script init.d, mente.

Dai comunque un'occhiata al registro e ai file di registro degli errori per supervisord . Cosa c'è dentro? Su Ubuntu 10.10 sono presenti /var/log/supervisor/supervisord.log. Puoi scrutare usando il comando 'maintail' in supervisorctl.


1

Forse in qualche modo non correlato ma assicurati di non commettere lo stesso errore che ho fatto io. Avevo un sacco di directory e file (file di registro) che stavo cercando di usare come non-root che erano stati accidentalmente già di proprietà di root, rendendo impossibile continuare a supervisionare come non-root. Bloggato a riguardo qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.