我有一些定期任务,我用芹菜运行(由supervisord守护),但在尝试在主目录中为用户创建一个目录后,我为supervisor的进程设置了一个"拒绝权限"错误。在查看了一个正在运行的芹菜任务中的os.environ
dict后,我注意到USER
var被设置为"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
是什么原因造成的?任何帮助都将不胜感激!
我认为这是因为您没有设置HOME和USER环境变量。如果您的子流程依赖于所设置的子流程,则在使用"user="选项时,这是必要的。
子过程环境的监督后文件:
supervisord在运行子流程时不会执行shell,因此环境变量(如USER、PATH、HOME、shell、LOGNAME等)不会从默认值更改或以其他方式重新分配
所以也许可以试试:
environment=USER=<USER>,HOME=/home/<USER>,PYTHONPATH=/home/<USER>/apps/sync