¿Cómo puedo ejecutar supervisor sin usar root?

8

Parece que tengo problemas para entender por qué el supervisor no se ejecutará como un usuario no root. Si lo inicio con el usuario establecido en jason (pid 1000), obtengo lo siguiente en el archivo de 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

... entonces el proceso muere por alguna razón desconocida. Si lo inicio sin sudo (bajo el usuario jason), obtengo un resultado similar:

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

... y todavía no funciona. Si es de alguna ayuda, aquí está el archivo supervisord.conf que estoy 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

... y aquí está 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

¿Alguien puede ayudarme a descubrir qué está pasando?

Jason Baker
fuente
¿Alguna vez llegaste al fondo de esto?
Michael Waterfall

Respuestas:

2

Intenta comentar este parámetro. Si no especifica un usuario, debe ejecutarse con la misma identificación de usuario que inició el proceso.

user=jason ; default user
Roger Hoover
fuente
1

Soy muy nuevo en supervisar a mí mismo, pero también estoy tratando de que funcione con celeryd. Por ahora, estoy feliz de que el supervisor se ejecute como root ya que se ejecuta con un script init.d, tenga en cuenta.

De todos modos, eche un vistazo a los archivos de registro y registro de errores para el supervisor . ¿Que hay ahi? En Ubuntu 10.10 están adentro /var/log/supervisor/supervisord.log. Puede mirar usando el comando 'mantenedor' en supervisorctl.

tobych
fuente
1

Quizás no esté relacionado, pero asegúrese de no cometer el mismo error que yo. Tenía un montón de directorios y archivos (archivos de registro) que intentaba usar como no root que accidentalmente ya habían sido propiedad de root, por lo que era imposible continuar la supervisión como no root. Blogueado al respecto aquí

Peter Bengtsson
fuente