Celery作为os.environ上的守护进程任务KeyError

时间:2013-04-23 09:53:45

标签: django celery

我使用芹菜作为Celeryd和Django的守护进程,而不是Apache和Google Compute Engine机器。

我的Celeryd默认配置为:

CELERYD_USER="myuser-notroot"
CELERYD_GROUP="developers"

我认为所有权限都设置得很好(我想)。当我启动我的系统时,所有连接都很好,但是当我启动一个任务时:

import os
homedir = os.environ['HOME']

我登录日志:

    homedir = os.environ['HOME']
  File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
    raise KeyError(key)
  KeyError: 'HOME'

但是如果我执行sudo /etc/init.d/celeryd restart,问题就解决了。任何的想法?也许服务启动有些问题?

1 个答案:

答案 0 :(得分:0)

通常不会为所有用户定义HOME环境变量。因此,当Celery在启动时启动时,该变量不可用。

当您使用sudo重新启动它时,Celery流程会继承您的用户环境中的环境变量,这解释了它现在有效的原因(尽管HOME将设置为您的< / strong> homedir)。

你应该以不同的方式获得homedir。有关检索主目录的替代方法,请参阅How to get the home directory in Python?