2012-01-27 21 views
7

Tôi có một số nhiệm vụ định kỳ mà tôi chạy với cần tây (được daemonized bởi người giám sát), nhưng sau khi cố gắng tạo thư mục trong thư mục gốc cho người dùng tôi thiết lập cho quá trình giám sát tôi đã nhận lỗi "cho phép bị từ chối". Sau khi nhìn vào số os.environ dict trong nhiệm vụ cần tây chạy, tôi nhận thấy rằng biến số USER được đặt thành 'root' chứ không phải người dùng mà tôi đã thiết lập trong cấu hình giám sát của tôi cho cần tây.Người dùng không chính xác cho người giám sát là cần thiết

Đây là những gì tôi /usr/local/etc/supervisord.conf trông giống như:

[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 

Điều gì có thể gây ra điều này? Bất kỳ trợ giúp sẽ được siêu đánh giá cao!

Trả lời

9

Tôi tin rằng điều này là do thực tế là bạn không đặt biến môi trường HOME và USER. Điều này là cần thiết khi sử dụng tùy chọn "user =" nếu quy trình con của bạn dựa trên các cài đặt được đặt.

Sau khi tài liệu supervisord trên Subprocess Environment:

Không vỏ được thực hiện bởi supervisord khi nó chạy một tiến trình con, vì vậy các biến môi trường như USER, PATH, HOME, SHELL, LOGNAME, vv không thay đổi từ họ giá trị mặc định hoặc bố trí

Vì vậy, có lẽ thử:

environment=USER=<USER>,HOME=/home/<USER>,PYTHONPATH=/home/<USER>/apps/sync 
Các vấn đề liên quan