jma*_*son 7 python ubuntu celery supervisord
我有一些周期性的任务,我用芹菜运行(由supervisord守护),但在尝试在主目录中创建一个目录为我为主管的进程设置的用户我得到了"权限被拒绝"错误.在查看正在os.environ运行的芹菜任务中的dict后,我注意到USERvar设置为'root',而不是我在我的supervisord配置中为celery设置的用户.
这就是我的/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
Run Code Online (Sandbox Code Playgroud)
可能是什么导致了这个?任何帮助将非常感激!
我相信这是因为您没有设置HOME和USER环境变量.如果您的子进程依赖于所设置的子进程,则在使用"user ="选项时这是必需的.
在关于子进程环境的 supervisord文档之后:
当supervisord运行子进程时,没有shell执行shell,因此诸如USER,PATH,HOME,SHELL,LOGNAME等环境变量不会更改其默认值或以其他方式重新分配
所以也许尝试:
environment=USER=<USER>,HOME=/home/<USER>,PYTHONPATH=/home/<USER>/apps/sync
Run Code Online (Sandbox Code Playgroud)