我有一些使用 celery 运行的定期任务(由supervisord 守护),但是在尝试为我为supervisord 进程设置的用户的主目录中创建一个目录后,我收到了“权限被拒绝”错误。看完之后os.environ
在运行芹菜任务中的字典我注意到USER
var 设置为“root”,而不是我在 celery 的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 =”选项时这是必要的。
监管文件记录后子流程环境 http://supervisord.org/subprocess.html#subprocess-environment:
Supervisord 在运行子进程时不会执行任何 shell,因此环境变量(例如 USER、PATH、HOME、SHELL、LOGNAME 等)不会更改其默认值或以其他方式重新分配
所以也许可以尝试:
environment=USER=<USER>,HOME=/home/<USER>,PYTHONPATH=/home/<USER>/apps/sync
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)