错误的用户用于supervisor的celeryd
我有一些定期要执行的任务,是用celery来处理的(通过supervisord来管理)。但是,当我尝试在我为supervisor设置的用户的主目录下创建一个文件夹时,出现了“权限被拒绝”的错误。查看正在运行的celery任务中的os.environ
字典时,我发现USER
这个变量被设置为'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
这可能是什么原因造成的呢?任何帮助都非常感谢!
1 个回答
9
我觉得这个问题是因为你没有设置HOME和USER这两个环境变量。使用“user=”选项时,如果你的子进程依赖这些变量,就必须设置它们。
根据supervisord的文档,关于子进程环境的说明:
当supervisord运行一个子进程时,并不会执行任何shell,所以像USER、PATH、HOME、SHELL、LOGNAME等环境变量不会被改变,仍然保持默认值或其他分配的值。
所以你可以试试:
environment=USER=<USER>,HOME=/home/<USER>,PYTHONPATH=/home/<USER>/apps/sync