2012-01-27 10 views
7

Mam pewne okresowe zadania, które uruchamiam z selerem (daemonized przez supervisord), ale po próbie utworzenia katalogu w katalogu domowym dla użytkownika i skonfigurować dla procesu nadzorcy dostałem błąd "odmowa pozwolenia". Po obejrzeniu dyktafonu os.environ w uruchomionym zadaniu selera zauważyłem, że zmiennavar jest ustawiona na "root", a nie użytkownika, który ustawiłem w mojej konfiguracji nadzorczej dla selera.Niepoprawny użytkownik dla supervisor'd seleryd

To właśnie mój /usr/local/etc/supervisord.conf wygląda następująco:

[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 

Co może być tego przyczyną? Każda pomoc będzie bardzo ceniona!

Odpowiedz

9

Uważam, że jest to spowodowane faktem, że nie ustawiono zmiennych środowiskowych HOME i USER. Jest to konieczne, gdy używasz opcji "user =", jeśli podproces jest zależny od tych, które są ustawione.

Po supervisord dokumentacji na Subprocess Environment:

Nie skorupa jest wykonywany przez supervisord gdy uruchamia podproces, więc zmienne środowiskowe, takie jak użytkownika, ścieżka, dom, Shell, LOGNAME itp nie są zmieniane od ich domyślne lub inaczej przypisane

Więc może spróbuj:

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