7

セロリ (supervisord によってデーモン化された) で実行する定期的なタスクがいくつかありますが、スーパーバイザーのプロセス用にセットアップしたユーザーのホーム ディレクトリにディレクトリを作成しようとした後、「アクセス許可が拒否されました」というエラーが発生しました。os.environ実行中の celery タスクで dict を見た後、 USERvar が 'root' に設定されており、celery の Supervisord 設定で設定したユーザーではないことに気付きました。

これは私/usr/local/etc/supervisord.confのように見えるものです:

[unix_http_server]
file=/tmp/supervisor.sock
chmod=0777

[supervisord]
logfile=/var/log/supervisord.log
pidfile=/var/run/supervisord.pid

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock

[program:celery]
command=/home/<USER>/.virtualenvs/sync/bin/celeryd --beat --loglevel=INFO
environment=PYTHONPATH=/home/<USER>/apps/sync
directory=/home/<USER>/apps/sync
user=<USER>
numprocs=1
stdout_logfile=/var/log/celeryd.log
stderr_logfile=/var/log/celeryd.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 30

何が原因でしょうか? どんな助けでも大歓迎です!

4

1 に答える 1

9

これは、HOME および USER 環境変数を設定していないことが原因だと思います。これは、サブプロセスが設定されているものに依存している場合に「user=」オプションを使用するときに必要です。

Subprocess Environmentに関する Supervisord ドキュメントの後:

サブプロセスを実行するときに、supervisord によってシェルが実行されることはないため、USER、PATH、HOME、SHELL、LOGNAME などの環境変数は、デフォルトから変更されたり、再割り当てされたりしません。

だからおそらく試してみてください:

environment=USER=<USER>,HOME=/home/<USER>,PYTHONPATH=/home/<USER>/apps/sync
于 2012-03-08T23:42:16.223 に答える