我在使用Redis作为virtualenv的经纪人运行Celery。我有一个通常的shell脚本来启动celeryd。我有一个将临时文件写入$ HOME / .tmp的任务。我使用mytask.delay(arg1,arg2)从Django python shell启动芹菜任务。当我手动启动芹菜时,任务按预期工作 - 打开终端和./celeryd_start(如下所示)。但是,当我使用supervisor启动celery时,任务失败,因为它无法写入tmp文件。 Supervisor配置为使用相同的shell脚本启动celery,并在同一用户下手动启动它。
我不知道该怎么回事,主管celery进程在用于手动启动芹菜的同一用户下运行,它应具有相同的权限。我尝试在超级用户配置文件中设置umask = 000,但这没有任何改变。
我需要更改任何主管设置才能使其正常工作吗?
我尝试将权限设置为777并将位置更改为tmp无效。该脚本使用以下命令创建临时目录。
mkdir -p $HOME/./tmp/ && chmod a+rx $HOME/.tmp/
主管配置:
[program:apl_dev_celeryd]
; Set full path to celery program if using virtualenv
command=/home/kp/apl/dev/bin/celeryd_start
user=kp
numprocs=1
stdout_logfile=/home/kp/apl/dev/logs/worker_stdout.log
stderr_logfile=/home/kp/apl/dev/logs/worker_stderr.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 10
killasgroup=true
priority=993
celeryd_start
#!/bin/bash
NAME="apl_dev_celeryd" # Name of the application
DJANGODIR=/home/kp/apl/dev/p # Django project directory
APP_NAME=p # which celery app is run
LOG_LEVEL=DEBUG # valid values DEBUG, INFO, WARNING, ERROR, CRITICAL, FATAL
CONCURRENCY=2 # number of worker processes
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source ../bin/activate
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
# Start celeryd
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec celery -A $APP_NAME worker --loglevel=$LOG_LEVEL --concurrency=$CONCURRENCY
python 2.7.3 芹菜3.1.16 ubuntu 12.04
答案 0 :(得分:0)
看起来监督过程没有正确处理环境变量。
设置:
environment=HOME="/tmp/.tmp/"
在主管的流程配置中解决了问题。