使用 supervisor 管理 Celery 服务

摘要:
使用supervisor管理Celery服务Celery后台运行如果我们想让celeryworker运行在后台而不是终端上,在后台以守护进程的方式运行,我们可以使用supervisor进行管理。根据你自身项目配置好上述配置后就可以通过/etc/init.d/celeryd{start|stop|restart|graceful|kill|dryrun|create-paths}这些命令来控制Celeryworker进程。启动beat如果你的项目中还有周期任务,那么还得把Celerybeat启动起来。把GitHub仓库中的celerybeat文件复制到/etc/init.d/celerybeat文件中,然后赋予可执行权限:sudochmod+x/etc/init.d/celerybeat。不过,如果没有什么特殊配置,可以直接使用/etc/default/celeryd配置文件,不必创建/etc/default/celerybeat配置文件。
使用 supervisor 管理 Celery 服务 Celery 后台运行

如果我们想让celery worker运行在后台而不是终端上,在后台以守护进程的方式运行,我们可以使用supervisor进行管理。

celery 的安装
pip install celery

celery的安装很简单,直接通过pip就能够安装,并且本身没有任何的配置,如果需要命令行运行,直接以下命令:

celery -A proj(个人的项目,一般为main文件的相对路径) worker -l info

注意:如果你是win10系统,使用上面命令,可能报错:

Celery ValueError: not enough values to unpack (expected 3, got 0)

请查看这篇文章解决问题

使用通用的 init-script

首先获取 Celery 的 GitHub 仓库extra/generic-init.d/文件夹下的文件。

启动 worker

将上面 GitHub 仓库文件夹下的celeryd文件复制到本地的/etc/init.d/celeryd文件中并赋予可执行的权限:sudo chmod +x /etc/init.d/celeryd,然后在/etc/default/文件夹下创建celeryd配置文件:

#Names of nodes to start
#most people will only start one node:
CELERYD_NODES="worker1"
#but you can also start multiple and configure settings
#for each in CELERYD_OPTS
#CELERYD_NODES="worker1 worker2 worker3"
#alternatively, you can specify the number of nodes to start:
#CELERYD_NODES=10
#Absolute or relative path to the 'celery' command:
CELERY_BIN="/usr/local/bin/celery"
#CELERY_BIN="/virtualenvs/def/bin/celery"
#App instance to use
#comment out this line if you don't use an app
CELERY_APP="proj"
#or fully qualified:
#CELERY_APP="proj.tasks:app"
#Where to chdir at start.
CELERYD_CHDIR="/opt/Myproject/"
#Extra command-line arguments to the worker
CELERYD_OPTS="--time-limit=300 --concurrency=8"
#Configure node-specific settings by appending node name to arguments:
#CELERYD_OPTS="--time-limit=300 -c 8 -c:worker2 4 -c:worker3 2 -Ofair:worker1"
#Set logging level to DEBUG
#CELERYD_LOG_LEVEL="DEBUG"
#%n will be replaced with the first part of the nodename.
CELERYD_LOG_FILE="/var/log/celery/%n%I.log"
CELERYD_PID_FILE="/var/run/celery/%n.pid"
#Workers should run as an unprivileged user.
#You need to create this user manually (or you can choose
#a user/group combination that already exists (e.g., nobody).
CELERYD_USER="celery"
CELERYD_GROUP="celery"
#If enabled pid and log directories will be created if missing,
#and owned by the userid/group configured.
CELERY_CREATE_DIRS=1

这个配置文件中,你可能需要更改CELERY_BIN,CELERY_APP,CELERYD_CHDIR,CELERYD_USER,CELERYD_GROUP

根据你自身项目配置好上述配置后就可以通过/etc/init.d/celeryd {start|stop|restart|graceful|kill|dryrun|create-paths}这些命令来控制 Celery worker 进程。

启动 beat

如果你的项目中还有周期任务,那么还得把 Celery beat 启动起来。

把 GitHub 仓库中的celerybeat文件复制到/etc/init.d/celerybeat文件中,然后赋予可执行权限:sudo chmod +x /etc/init.d/celerybeat

然后同样得有一个/etc/default/celerybeat配置文件。不过,如果没有什么特殊配置,可以直接使用/etc/default/celeryd配置文件,不必创建/etc/default/celerybeat配置文件。

如果你依然要创建的,那么这个文件可能是长这样的:

#Absolute or relative path to the 'celery' command:
CELERY_BIN="/usr/local/bin/celery"
#CELERY_BIN="/virtualenvs/def/bin/celery"
#App instance to use
#comment out this line if you don't use an app
CELERY_APP="proj"
#or fully qualified:
#CELERY_APP="proj.tasks:app"
#Where to chdir at start.
CELERYBEAT_CHDIR="/opt/Myproject/"
#Extra arguments to celerybeat
CELERYBEAT_OPTS="--schedule=/var/run/celery/celerybeat-schedule"

完成配置后,同样通过/etc/init.d/celerybeat {start|stop|restart|create-paths|status}这些命令控制 Celery beat 进程。

参考文档:
Celery daemon
How to run celery as a daemon?

免责声明:文章转载自《使用 supervisor 管理 Celery 服务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇memcached添加日志输出boost asio 异步实现tcp通讯下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Celery 3.x 升级至 celery 4.x(转)

预准备 首先介绍下项目中 celery 相关的依赖包,目前项目中主要使用的是 celery 进行异步处理,使用 celery-redbeat 设置定时异步任务,使用 flower 进行异步任务的监控。升级前相关包的版本情况如下: celery==3.1.25 celery-redbeat==0.10.4 flower==0.9.1 升级过程 在升级之前,...

异步任务分发模块Celery

Celery简介 Celery是一个功能完备即插即用的任务队列。它使得我们不需要考虑复杂的问题,使用非常简单。 celery适用异步处理问题,当遇到发送邮件、或者文件上传, 图像处理等等一些比较耗时的操作,我们可将其异步执行,这样用户不需要等待很久,提高用户体验。 celery的特点是: 简单,易于使用和维护,有丰富的文档。 高效,单个celery进程每...

Pycharm下 debug Celery

Outline 项目是 Flask + Celery 实现异步,需要断点调试 celery task 中的代码,但celery是通过命令行启动的,怎么借助pycharm进行断点调试? Pycharm断点调试Flask,参见:https://www.cnblogs.com/bigtreei/p/14742015.html  Pycharm断点调试Scrapy...

分布式任务队列--Celery的学习笔记

一、Celery简介   Celery是一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具。它是一个任务队列,专注于实时处理,同时还支持任务调度。   所谓任务队列,是一个逻辑上的概念,可以将抽象中的任务发送到指定的执行任务的组件,任务队列可以跨线程或机器运行。   Celery是基于Python开发的分布式异步消息任...

Django的celery配置(包括定时任务、队列)

一、安装celery Django项目不需要安装celery这个包,可以直接使用django-celery这个包,,先来安装它,在终端中输入: pip install django-celery 二、安装rabbitmq,建立celery队列 我做的项目用的就是rabbitmq,按道理来说,也是可以用redis作为消息队列的,但是rabbitmq更好,此...

Flask- celery (芹菜)

一.什么是Celery?   中文名翻译为芹菜,是flask中处理异步定时周期任务的第三方组件 二.基本结构  1.需要跑的任务代码app   2.用管道broker与用于存储任务(就是个缓存)  工具一般用redis  或者用rabbitMQ(兔子)   3.执行任务的人worker  简单实例 首先建立三个文件分别写入一下代码 from celery...