Comment puis-je exécuter supervisord sans utiliser root?

8

Il semble que j'aie du mal à comprendre pourquoi supervisord ne fonctionnera pas en tant qu'utilisateur non root. Si je le démarre avec l'utilisateur défini sur jason (pid 1000), j'obtiens ce qui suit dans le fichier journal:

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

... puis le processus meurt pour une raison inconnue. Si je le démarre sans sudo (sous l'utilisateur jason), j'obtiens une sortie similaire:

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

... et ça ne marche toujours pas. Si c'est une aide, voici le fichier supervisord.conf que j'utilise:

[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

... et voici 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

Quelqu'un peut-il m'aider à comprendre ce qui se passe?

Jason Baker
la source
Vous êtes-vous déjà rendu au fond des choses?
Michael Waterfall

Réponses:

2

Essayez de commenter ce paramètre. Si vous ne spécifiez pas d'utilisateur, il doit s'exécuter avec le même ID utilisateur qui a démarré le processus.

user=jason ; default user
Roger Hoover
la source
1

Je suis moi-même très nouveau au superviseur, mais j'essaie également de le faire fonctionner avec celeryd. Pour l'instant, je suis heureux que supervisord s'exécute en tant que root car il est exécuté avec un script init.d, l'esprit.

Quoi qu'il en soit, jetez un œil aux fichiers journaux et journaux d'erreurs pour supervisord . Quoi de neuf? Sur Ubuntu 10.10, ils sont là /var/log/supervisor/supervisord.log. Vous pouvez regarder à l'aide de la commande «maintail» dans supervisorctl.

tobych
la source
1

Peut-être un peu sans rapport, mais assurez-vous de ne pas faire la même erreur que moi. J'avais un tas de répertoires et de fichiers (fichiers journaux) que j'essayais d'utiliser en tant que non-root qui avaient accidentellement déjà appartenu à root, ce qui rend impossible de continuer à superviser en tant que non-root. Blogué à ce sujet ici

Peter Bengtsson
la source