我在apache和mod_wsgi服务的centos上运行django。我按照说明设置芹菜作为守护进程运行。
我将此初始化脚本https://github.com/celery/celery/blob/3.1/extra/generic-init.d/celeryd放在/etc/init.d/celeryd
并在
中设置配置/etc/default/celeryd
我在django settings.py文件中使用环境变量,因此我可以在开发和生产环境中使用不同的配置。我知道这些环境变量设置正确,因为应用程序一直在工作。我认为芹菜只是没有将变量传递给它或其他东西。
我通过输入env
命令进行检查。变量显得很好。
要开始我只是这样做:
service celeryd start
它尝试启动但抛出错误,说我没有设置环境变量。
我写了一个抓取环境变量的函数。这就是引发错误的原因。
def get_env_variable(var_name):
try:
return os.environ[var_name]
except KeyError:
error_msg = "Set the %s environment variable" % var_name
raise ImproperlyConfigured(error_msg)
抛出错误的唯一方法是未正确设置环境变量。
有谁知道为什么芹菜没有检测到我设定的环境变量?
答案 0 :(得分:10)
我刚刚发现我不仅需要在系统中设置环境变量,而且还必须将这些变量传递给/ etc / default / celleryd脚本。
我只是将我的变量放在/ etc / default / celleryd:
的底部export MY_SPECIAL_VARIABLE = "my production variable"
export MY_OTHERSPECIAL_VARIABLE = "my other production variable"
答案 1 :(得分:2)
如果环境变量写在~/.bashrc
上,您可以先将source ~/.bashrc
添加到/etc/init.d/celeryd
。
答案 2 :(得分:1)
您的/etc/default/celeryd
是否定义了芹菜应该运行的用户?
在我的手中我有:
CELERYD_USER="celery"
CELERYD_GROUP="celery"
您可以发布/etc/defaults/celeryd
配置文件吗?
答案 3 :(得分:1)
我使用celery和supervisor时遇到了同样的问题,我有一个使用shell脚本来启动芹菜工作者并且还获取env变量的超级管理员。
#!/bin/bash
source ~/.profile
CELERY_LOGFILE=/usr/local/src/imbue/application/imbue/log/celeryd.log
CELERYD_OPTS=" --loglevel=INFO --autoscale=10,5 --concurrency=8"
cd /usr/local/src/imbue/application/imbue/conf
exec celery worker -n celeryd@%h -f $CELERY_LOGFILE $CELERYD_OPTS
>在〜/ .profile:
export C_FORCE_ROOT="true"
export KEY="DEADBEEF"