Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 芹菜拍打不与织物反弹_Python_Django_Fabric_Celerybeat - Fatal编程技术网

Python 芹菜拍打不与织物反弹

Python 芹菜拍打不与织物反弹,python,django,fabric,celerybeat,Python,Django,Fabric,Celerybeat,我使用fabric满足所有部署需求。在大多数情况下,它工作完美无瑕,我很喜欢它。然而,有一项任务不断失败。这是以下任务: def bounce_celery_beat(): print 'Will bounce celery beat' run('sudo /etc/init.d/celerybeat stop') sleep(2) run('sudo /etc/init.d/celerybeat start') sleep(5) 我正在使用celery

我使用fabric满足所有部署需求。在大多数情况下,它工作完美无瑕,我很喜欢它。然而,有一项任务不断失败。这是以下任务:

def bounce_celery_beat():
    print 'Will bounce celery beat'
    run('sudo /etc/init.d/celerybeat stop')
    sleep(2)
    run('sudo /etc/init.d/celerybeat start')
    sleep(5)
我正在使用
celerybeat
执行一些需要在我的
celery
实例上执行的计划任务。每次运行上述任务时,
celerybeat
未运行。我必须登录到服务器并再次运行任务。我做错了什么?为什么我的反弹
celerybeat
任务永远不起作用

我已就此阅读了以下内容:

更新

我的
/etc/init.d/celerybeat
文件:

#!/bin/bash
# =========================================================
#  celerybeat - Starts the Celery periodic task scheduler.
# =========================================================
#
# :Usage: /etc/init.d/celerybeat {start|stop|force-reload|restart|try-restart|status}
# :Configuration file: /etc/default/celerybeat or /etc/default/celeryd
#
# See http://docs.celeryq.org/en/latest/cookbook/daemonizing.html#init-script-celerybeat

### BEGIN INIT INFO
# Provides:          celerybeat
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop:     $network $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: celery periodic task scheduler
### END INIT INFO

# Cannot use set -e/bash -e since the kill -0 command will abort
# abnormally in the absence of a valid process ID.
#set -e

DEFAULT_PID_FILE="/var/run/celerybeat.pid"
DEFAULT_LOG_FILE="/var/log/celerybeat.log"
DEFAULT_LOG_LEVEL="INFO"
DEFAULT_CELERYBEAT="celerybeat"

# /etc/init.d/ssh: start and stop the celery task worker daemon.

if test -f /etc/default/celeryd; then
    . /etc/default/celeryd
fi

if test -f /etc/default/celerybeat; then
    . /etc/default/celerybeat
fi

CELERYBEAT=${CELERYBEAT:-$DEFAULT_CELERYBEAT}
CELERYBEAT_PID_FILE=${CELERYBEAT_PID_FILE:-${CELERYBEAT_PIDFILE:-$DEFAULT_PID_FILE}}
CELERYBEAT_LOG_FILE=${CELERYBEAT_LOG_FILE:-${CELERYBEAT_LOGFILE:-$DEFAULT_LOG_FILE}}
CELERYBEAT_LOG_LEVEL=${CELERYBEAT_LOG_LEVEL:-${CELERYBEAT_LOGLEVEL:-$DEFAULT_LOG_LEVEL}}

export CELERY_LOADER

CELERYBEAT_OPTS="$CELERYBEAT_OPTS -f $CELERYBEAT_LOG_FILE -l $CELERYBEAT_LOG_LEVEL"

if [ -n "$2" ]; then
    CELERYBEAT_OPTS="$CELERYBEAT_OPTS $2"
fi

CELERYBEAT_LOG_DIR=`dirname $CELERYBEAT_LOG_FILE`
CELERYBEAT_PID_DIR=`dirname $CELERYBEAT_PID_FILE`
if [ ! -d "$CELERYBEAT_LOG_DIR" ]; then
    mkdir -p $CELERYBEAT_LOG_DIR
fi
if [ ! -d "$CELERYBEAT_PID_DIR" ]; then
    mkdir -p $CELERYBEAT_PID_DIR
fi

# Extra start-stop-daemon options, like user/group.
if [ -n "$CELERYBEAT_USER" ]; then
    DAEMON_OPTS="$DAEMON_OPTS --uid $CELERYBEAT_USER"
    chown "$CELERYBEAT_USER" $CELERYBEAT_LOG_DIR $CELERYBEAT_PID_DIR
fi
if [ -n "$CELERYBEAT_GROUP" ]; then
    DAEMON_OPTS="$DAEMON_OPTS --gid $CELERYBEAT_GROUP"
    chgrp "$CELERYBEAT_GROUP" $CELERYBEAT_LOG_DIR $CELERYBEAT_PID_DIR
fi

CELERYBEAT_CHDIR=${CELERYBEAT_CHDIR:-$CELERYD_CHDIR}
if [ -n "$CELERYBEAT_CHDIR" ]; then
    DAEMON_OPTS="$DAEMON_OPTS --workdir $CELERYBEAT_CHDIR"
fi


export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

check_dev_null() {
    if [ ! -c /dev/null ]; then
        echo "/dev/null is not a character device!"
        exit 1
    fi
}

ensure_dir() {
    if [ -d "$1" ]; then
        mkdir -p "$1"
        chown $CELERYBEAT_USER:$CELERYBEAT_GROUP "$1"
        chmod 02755 "$1"
    fi
}

check_paths() {
    ensure_dir "$(dirname $CELERYBEAT_PID_FILE)"
    ensure_dir "$(dirname $CELERYBEAT_LOG_FILE)"
}


wait_pid () {
    pid=$1
    forever=1
    i=0
    while [ $forever -gt 0 ]; do
        kill -0 $pid 1>/dev/null 2>&1
        if [ $? -eq 1 ]; then
            echo "OK"
            forever=0
        else
            kill -TERM "$pid"
            i=$((i + 1))
            if [ $i -gt 60 ]; then
                echo "ERROR"
                echo "Timed out while stopping (30s)"
                forever=0
            else
                sleep 0.5
            fi
        fi
    done
}


stop_beat () {
    echo -n "Stopping celerybeat... "
    if [ -f "$CELERYBEAT_PID_FILE" ]; then
        wait_pid $(cat "$CELERYBEAT_PID_FILE")
    else
        echo "NOT RUNNING"
    fi
}

start_beat () {
    echo "Starting celerybeat..."
    if [ -n "$VIRTUALENV" ]; then
        source $VIRTUALENV/bin/activate
    fi
    $CELERYBEAT $CELERYBEAT_OPTS $DAEMON_OPTS --detach \
                --pidfile="$CELERYBEAT_PID_FILE"
}



case "$1" in
  start)
    check_dev_null
    check_paths
    start_beat
    ;;
  stop)
    check_paths
    stop_beat
    ;;
  reload|force-reload)
    echo "Use start+stop"
    ;;
  restart)
    echo "Restarting celery periodic task scheduler"
    check_paths
    stop_beat
    check_dev_null
    start_beat
    ;;

  *)
    echo "Usage: /etc/init.d/celerybeat {start|stop|restart}"
    exit 1
esac

exit 0
更新2

以下是日志:

sudo /etc/init.d/celerybeat stop
+ DEFAULT_PID_FILE=/var/run/celerybeat.pid
+ DEFAULT_LOG_FILE=/var/log/celerybeat.log
+ DEFAULT_LOG_LEVEL=INFO
+ DEFAULT_CELERYBEAT=celerybeat
+ test -f /etc/default/celeryd
+ . /etc/default/celeryd
++ CELERYD_NODES=w1
++ CELERYD_OPTS='--time-limit=7200 -E'
++ CELERYD_CHDIR=/home/ubuntu/myexamplewebsite/mywebsite
++ CELERYD_MULTI='/home/ubuntu/myexamplewebsite/mywebsite/manage.py celeryd_multi'
++ CELERYD_LOG_FILE=/var/log/celery/%n.log
++ CELERYD_PID_FILE=/var/run/celery/%n.pid
++ CELERYD_USER=www-data
++ CELERYD_GROUP=www-data
++ CELERYBEAT_CHDIR=/home/ubuntu/myexamplewebsite/mywebsite
++ CELERYBEAT='/home/ubuntu/myexamplewebsite/mywebsite/manage.py celerybeat'
++ CELERYBEAT_OPTS='-S djcelery.schedulers.DatabaseScheduler'
++ CELERYBEAT_LOG_LEVEL=INFO
++ CELERYBEAT_USER=www-data
++ CELERYBEAT_GROUP=www-data
++ CELERYBEAT_LOG_FILE=/var/log/celery/beat.log
++ CELERYBEAT_PID_FILE=/var/run/celery/beat.pid
++ CELERYEV='/home/ubuntu/myexamplewebsite/mywebsite/manage.py celeryev'
++ CELERYEV_USER=www-data
++ CELERYEV_GROUP=www-data
++ CELERYEV_CAM=djcelery.snapshot.Camera
++ CELERYEV_LOG_FILE=/var/log/celery/evcam.log
++ CELERYEV_PID_FILE=/var/run/celery/evcam.pid
+ test -f /etc/default/celerybeat
+ CELERYBEAT='/home/ubuntu/myexamplewebsite/mywebsite/manage.py celerybeat'
+ CELERYBEAT_PID_FILE=/var/run/celery/beat.pid
+ CELERYBEAT_LOG_FILE=/var/log/celery/beat.log
+ CELERYBEAT_LOG_LEVEL=INFO
+ export CELERY_LOADER
+ CELERYBEAT_OPTS='-S djcelery.schedulers.DatabaseScheduler -f /var/log/celery/beat.log -l INFO'
+ '[' -n '' ']'
++ dirname /var/log/celery/beat.log
+ CELERYBEAT_LOG_DIR=/var/log/celery
++ dirname /var/run/celery/beat.pid
+ CELERYBEAT_PID_DIR=/var/run/celery
+ '[' '!' -d /var/log/celery ']'
+ '[' '!' -d /var/run/celery ']'
+ '[' -n www-data ']'
+ DAEMON_OPTS=' --uid www-data'
+ chown www-data /var/log/celery /var/run/celery
+ '[' -n www-data ']'
+ DAEMON_OPTS=' --uid www-data --gid www-data'
+ chgrp www-data /var/log/celery /var/run/celery
+ CELERYBEAT_CHDIR=/home/ubuntu/myexamplewebsite/mywebsite
+ '[' -n /home/ubuntu/myexamplewebsite/mywebsite ']'
+ DAEMON_OPTS=' --uid www-data --gid www-data --workdir /home/ubuntu/myexamplewebsite/mywebsite'
+ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/sbin:/sbin
+ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/sbin:/sbin
+ case "$1" in
+ check_paths
++ dirname /var/run/celery/beat.pid
+ ensure_dir /var/run/celery
+ '[' -d /var/run/celery ']'
+ mkdir -p /var/run/celery
+ chown www-data:www-data /var/run/celery
+ chmod 02755 /var/run/celery
++ dirname /var/log/celery/beat.log
+ ensure_dir /var/log/celery
+ '[' -d /var/log/celery ']'
+ mkdir -p /var/log/celery
+ chown www-data:www-data /var/log/celery
+ chmod 02755 /var/log/celery
+ stop_beat
+ echo -n 'Stopping celerybeat... '
Stopping celerybeat... + '[' -f /var/run/celery/beat.pid ']'
++ cat /var/run/celery/beat.pid
+ wait_pid 3691
+ pid=3691
+ forever=1
+ i=0
+ '[' 1 -gt 0 ']'
+ kill -0 3691
+ '[' 0 -eq 1 ']'
+ kill -TERM 3691
+ i=1
+ '[' 1 -gt 60 ']'
+ sleep 0.5
+ '[' 1 -gt 0 ']'
+ kill -0 3691
+ '[' 1 -eq 1 ']'
+ echo OK
OK
+ forever=0
+ '[' 0 -gt 0 ']'
+ set +x


sudo /etc/init.d/celerybeat start
+ DEFAULT_PID_FILE=/var/run/celerybeat.pid
+ DEFAULT_LOG_FILE=/var/log/celerybeat.log
+ DEFAULT_LOG_LEVEL=INFO
+ DEFAULT_CELERYBEAT=celerybeat
+ test -f /etc/default/celeryd
+ . /etc/default/celeryd
++ CELERYD_NODES=w1
++ CELERYD_OPTS='--time-limit=7200 -E'
++ CELERYD_CHDIR=/home/ubuntu/myexamplewebsite/mywebsite
++ CELERYD_MULTI='/home/ubuntu/myexamplewebsite/mywebsite/manage.py celeryd_multi'
++ CELERYD_LOG_FILE=/var/log/celery/%n.log
++ CELERYD_PID_FILE=/var/run/celery/%n.pid
++ CELERYD_USER=www-data
++ CELERYD_GROUP=www-data
++ CELERYBEAT_CHDIR=/home/ubuntu/myexamplewebsite/mywebsite
++ CELERYBEAT='/home/ubuntu/myexamplewebsite/mywebsite/manage.py celerybeat'
++ CELERYBEAT_OPTS='-S djcelery.schedulers.DatabaseScheduler'
++ CELERYBEAT_LOG_LEVEL=INFO
++ CELERYBEAT_USER=www-data
++ CELERYBEAT_GROUP=www-data
++ CELERYBEAT_LOG_FILE=/var/log/celery/beat.log
++ CELERYBEAT_PID_FILE=/var/run/celery/beat.pid
++ CELERYEV='/home/ubuntu/myexamplewebsite/mywebsite/manage.py celeryev'
++ CELERYEV_USER=www-data
++ CELERYEV_GROUP=www-data
++ CELERYEV_CAM=djcelery.snapshot.Camera
++ CELERYEV_LOG_FILE=/var/log/celery/evcam.log
++ CELERYEV_PID_FILE=/var/run/celery/evcam.pid
+ test -f /etc/default/celerybeat
+ CELERYBEAT='/home/ubuntu/myexamplewebsite/mywebsite/manage.py celerybeat'
+ CELERYBEAT_PID_FILE=/var/run/celery/beat.pid
+ CELERYBEAT_LOG_FILE=/var/log/celery/beat.log
+ CELERYBEAT_LOG_LEVEL=INFO
+ export CELERY_LOADER
+ CELERYBEAT_OPTS='-S djcelery.schedulers.DatabaseScheduler -f /var/log/celery/beat.log -l INFO'
+ '[' -n '' ']'
++ dirname /var/log/celery/beat.log
+ CELERYBEAT_LOG_DIR=/var/log/celery
++ dirname /var/run/celery/beat.pid
+ CELERYBEAT_PID_DIR=/var/run/celery
+ '[' '!' -d /var/log/celery ']'
+ '[' '!' -d /var/run/celery ']'
+ '[' -n www-data ']'
+ DAEMON_OPTS=' --uid www-data'
+ chown www-data /var/log/celery /var/run/celery
+ '[' -n www-data ']'
+ DAEMON_OPTS=' --uid www-data --gid www-data'
+ chgrp www-data /var/log/celery /var/run/celery
+ CELERYBEAT_CHDIR=/home/ubuntu/myexamplewebsite/mywebsite
+ '[' -n /home/ubuntu/myexamplewebsite/mywebsite ']'
+ DAEMON_OPTS=' --uid www-data --gid www-data --workdir /home/ubuntu/myexamplewebsite/mywebsite'
+ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/sbin:/sbin
+ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/sbin:/sbin
+ case "$1" in
+ check_dev_null
+ '[' '!' -c /dev/null ']'
+ check_paths
++ dirname /var/run/celery/beat.pid
+ ensure_dir /var/run/celery
+ '[' -d /var/run/celery ']'
+ mkdir -p /var/run/celery
+ chown www-data:www-data /var/run/celery
+ chmod 02755 /var/run/celery
++ dirname /var/log/celery/beat.log
+ ensure_dir /var/log/celery
+ '[' -d /var/log/celery ']'
+ mkdir -p /var/log/celery
+ chown www-data:www-data /var/log/celery
+ chmod 02755 /var/log/celery
+ start_beat
+ echo 'Starting celerybeat...'
Starting celerybeat...
+ '[' -n '' ']'
+ /home/ubuntu/myexamplewebsite/mywebsite/manage.py celerybeat -S djcelery.schedulers.DatabaseScheduler -f /var/log/celery/beat.log -l INFO --uid www-data --gid www-data -- --pidfile=/var/run/celery/beat.pid
Overriding with Production settings...
+ set +x

您链接的
fabfile.py
在我们看来似乎是
supervisor
在您使用init脚本时运行
celery beat
。你能把你的
/etc/init.d/celerybeat
脚本的内容添加到问题中吗?就在这里。我发布了整个文件。若要调试,请尝试手动运行相同的脚本,并执行每个步骤。顺便说一下,您可以使用
/etc/init.d/celerybeat restart
功能而不是stop/wait/start,stop已经执行了等待(最长30秒)。我假设任务在
celerbeat stop
期间因错误代码而失败,但是运行
fab bounce\u芹菜\u beat
会显示更多。实际上,在
restart
中也会发生同样的情况。我将其更改为
停止
开始
。在我们看来,您链接的
fabfile.py
主管在使用初始化脚本时运行
芹菜节拍
。你能把你的
/etc/init.d/celerybeat
脚本的内容添加到问题中吗?就在这里。我发布了整个文件。若要调试,请尝试手动运行相同的脚本,并执行每个步骤。顺便说一下,您可以使用
/etc/init.d/celerybeat restart
功能而不是stop/wait/start,stop已经执行了等待(最长30秒)。我假设任务在
celerbeat stop
期间因错误代码而失败,但是运行
fab bounce\u芹菜\u beat
会显示更多。实际上,在
restart
中也会发生同样的情况。我将其更改为
停止
开始
。当我自己做和通过织物做时,日志是相同的。