【问题标题】:Celery task fails to write to home dir when Celery runs under supervisord当 Celery 在 supervisord 下运行时,Celery 任务无法写入主目录
【发布时间】: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


    【解决方案1】:

    看起来受监督的进程没有正确处理环境变量。

    设置:

    environment=HOME="/tmp/.tmp/"
    

    在主管的进程配置中解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-24
      • 2021-04-26
      • 2013-12-16
      • 1970-01-01
      • 2018-03-21
      • 2022-11-14
      • 1970-01-01
      • 2017-02-02
      相关资源
      最近更新 更多