ルートを使用せずにスーパーバイザを実行するにはどうすればよいですか?


8

supervisordが非rootユーザーとして実行されない理由を理解するのに問題があるようです。ユーザーをjason(pid 1000)に設定して起動すると、ログファイルに次のようになります。

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

...その後、何らかの未知の理由でプロセスが停止します。sudoなしで(ユーザーjasonの下で)開始すると、同様の出力が得られます。

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

...それでも実行されません。それが助けになるなら、これが私が使っているsupervisord.confファイルです:

[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

...そしてここに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

誰かが私が何が起こっているのかを理解するのを手伝ってくれる?


あなたはこれの底に到達したことがありますか?
マイケルウォーターフォール

回答:


2

このパラメーターをコメント化してみてください。ユーザーを指定しない場合は、プロセスを開始したのと同じユーザーIDで実行する必要があります。

user=jason ; default user

1

私自身、スーパーバイザーに非常に慣れていませんが、celerydで動作させることも試みています。とりあえず、スーパーバイザがinit.dスクリプトで実行されているので、スーパーユーザーがrootとして実行されてうれしいです。

とにかく、監視対象のログとエラーログファイルを確認してください。何が入ってるの?Ubuntu 10.10ではにあります/var/log/supervisor/supervisord.log。supervisorctlでコマンド 'maintail'を使用してピアリングできます。


1

おそらく多少無関係ですが、私がしたのと同じ間違いをしないようにしてください。誤ってすでにルートに所有されているため、非ルートとして使用しようとしていたディレクトリとファイル(ログファイル)の束があり、非ルートとして監視を続けることができませんでした。ここでそれについてブログに書いた

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.