【发布时间】:2014-12-26 11:08:12
【问题描述】:
我正在使用 Redis 作为 virtualenv 中的代理运行 Celery。我有一个常用的 shell 脚本来启动 celeryd。我有一个将临时文件写入 $HOME/.tmp 的任务。我使用 mytask.delay(arg1, arg2) 从 Django python shell 启动 celery 任务。当我手动启动 celery 时,任务按预期工作 - 打开终端和 ./celeryd_start(如下所示)。但是,当我使用主管启动 celery 时,任务失败,因为它无法写入 tmp 文件。 Supervisor 配置为使用相同的 shell 脚本启动 celery,并在同一用户下手动启动它。
我不知道发生了什么,supervisor 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
【问题讨论】:
标签: python celery supervisord