Bagaimana saya bisa menjalankan supervisord tanpa menggunakan root?

8

Saya tampaknya mengalami kesulitan mencari tahu mengapa supervisord tidak akan berjalan sebagai pengguna non-root. Jika saya memulainya dengan set pengguna ke jason (pid 1000), saya mendapatkan yang berikut ini di file log:

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

... lalu prosesnya mati karena alasan yang tidak diketahui. Jika saya memulainya tanpa sudo (di bawah jason pengguna), saya mendapatkan hasil yang serupa:

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

... dan masih tidak berjalan. Jika ada bantuan, inilah file supervisord.conf yang saya gunakan:

[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

... dan inilah 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

Adakah yang bisa membantu saya mencari tahu apa yang terjadi?

Jason Baker
sumber
Apakah Anda pernah sampai ke dasar ini?
Air Terjun Michael

Jawaban:

2

Coba komentari param ini. Jika Anda tidak menentukan pengguna, itu harus dijalankan dengan id pengguna yang sama yang memulai proses.

user=jason ; default user
Roger Hoover
sumber
1

Saya sendiri sangat baru untuk mengawasi tetapi saya juga mencoba membuatnya bekerja dengan seleryd. Untuk saat ini saya senang bahwa supervisord dapat berjalan sebagai root karena dijalankan dengan skrip init.d, pikiran.

Pokoknya kita lihat file log dan error untuk supervisord . Apa yang ada di sana? Di Ubuntu 10.10 mereka masuk /var/log/supervisor/supervisord.log. Anda dapat mengintip menggunakan perintah 'maintail' di supervisorctl.

tobych
sumber
1

Mungkin agak tidak berhubungan tetapi pastikan Anda tidak membuat kesalahan yang sama seperti saya. Saya memiliki banyak direktori dan file (file log) yang saya coba gunakan sebagai non-root yang secara tidak sengaja sudah dimiliki oleh root sehingga tidak mungkin untuk melanjutkan supervisord sebagai non-root. Di-blog-kan di sini

Peter Bengtsson
sumber