7

我有一些使用 celery 运行的定期任务(由 supervisord 守护),但是在尝试为用户创建主目录中的目录后,我为主管进程设置了“权限被拒绝”错误。在查看正在os.environ运行的 celery 任务中的 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

这可能是什么原因造成的?任何帮助将不胜感激!

4

1 回答 1

9

我相信这是因为您没有设置 HOME 和 USER 环境变量。如果您的子进程依赖于设置的那些,则在使用“user=”选项时这是必要的。

Subprocess Environment上的supervisord文档之后:

supervisord 在运行子进程时不会执行任何 shell,因此 USER、PATH、HOME、SHELL、LOGNAME 等环境变量不会从默认值更改或以其他方式重新分配

所以也许尝试:

environment=USER=<USER>,HOME=/home/<USER>,PYTHONPATH=/home/<USER>/apps/sync
于 2012-03-08T23:42:16.223 回答