Неправильный пользователь для supervisor'd celeryd - PullRequest
7 голосов
/ 27 января 2012

У меня есть некоторые периодические задачи, которые я выполняю с сельдереем (демонизируется supervisord), но после попытки создать каталог в домашнем каталоге для пользователя, который я настроил для процесса supervisor'd, я получил ошибку «Отказано в доступе».Посмотрев на диктовку os.environ в работающей задаче сельдерея, я заметил, что для переменной USER задано значение «root», а не для пользователя, которого я настроил в своей конфигурации 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

Что может быть причиной этого?Любая помощь будет очень признательна!

1 Ответ

9 голосов
/ 09 марта 2012

Я полагаю, это связано с тем, что вы не установили переменные среды HOME и USER. Это необходимо при использовании опции «user =», если ваш подпроцесс полагается на те, которые установлены.

После супервизорной документации по Среда подпроцесса :

При запуске подпроцесса оболочка не запускается, поэтому переменные окружения, такие как USER, PATH, HOME, SHELL, LOGNAME и т. Д., Не изменяются по умолчанию или не назначаются другим образом

Так что, возможно, попробуйте:

environment=USER=<USER>,HOME=/home/<USER>,PYTHONPATH=/home/<USER>/apps/sync
...