Wie kann ich Supervisord ausführen, ohne root zu verwenden?


8

Ich habe anscheinend Probleme herauszufinden, warum Supervisord nicht als Nicht-Root-Benutzer ausgeführt wird. Wenn ich es mit dem Benutzer jason (pid 1000) starte, wird in der Protokolldatei Folgendes angezeigt:

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

... dann stirbt der Prozess aus einem unbekannten Grund. Wenn ich es ohne sudo starte (unter dem Benutzer jason), erhalte ich eine ähnliche Ausgabe:

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

... und es läuft immer noch nicht. Wenn es Hilfe gibt, ist hier die Datei Supervisord.conf, die ich verwende:

[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

... und hier ist 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

Kann mir jemand helfen, herauszufinden, was los ist?


Bist du dem jemals auf den Grund gegangen?
Michael Wasserfall

Antworten:


2

Versuchen Sie, diesen Parameter zu kommentieren. Wenn Sie keinen Benutzer angeben, sollte dieser mit derselben Benutzer-ID ausgeführt werden, mit der der Prozess gestartet wurde.

user=jason ; default user

1

Ich bin selbst sehr neu im Supervisor, aber ich versuche auch, es mit Celeryd zum Laufen zu bringen. Im Moment bin ich froh, dass Supervisord als Root ausgeführt wird, wie es mit einem init.d-Skript ausgeführt wird.

Schauen Sie sich auf jeden Fall die Protokoll- und Fehlerprotokolldateien für Supervisord an . Was ist da drin? Unter Ubuntu 10.10 sind sie dabei /var/log/supervisor/supervisord.log. Sie können den Befehl 'mainail' in Supervisorctl verwenden.


1

Vielleicht etwas unabhängig, aber stellen Sie sicher, dass Sie nicht den gleichen Fehler machen wie ich. Ich hatte eine Reihe von Verzeichnissen und Dateien (Protokolldateien), die ich als Nicht-Root verwenden wollte und die versehentlich bereits Root gehörten, sodass es unmöglich war, Supervisord als Nicht-Root fortzusetzen. Hier darüber gebloggt

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.