python测试开发django之使用supervisord 后台启动celery 服务(worker/beat)

yizhihongxing

使用Supervisord后台启动Celery服务(worker/beat)

前言

Django项目中通常会使用Celery来进行后台任务的处理,但如果我们直接使用命令行启动,那么当我们关闭终端或者终端断开时,Celery服务也会随之停止。为了解决这个问题,我们可以使用Supervisord来实现后台运行Celery服务的目的。

安装Supervisord

首先需要安装Supervisord,可以使用pip进行安装:

pip install supervisor

配置Supervisord

  1. 首先需要生成配置文件:
echo_supervisord_conf > /etc/supervisord.conf
  1. 接着编辑配置文件,添加以下内容(示例中的projectname请替换为你自己的项目名):
[program:worker]
command=/path/to/venv/bin/celery worker -A projectname --loglevel=info --concurrency=4 -Ofair
directory=/path/to/projectdir
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/path/to/projectdir/logs/celery-worker.log
stderr_logfile=/path/to/projectdir/logs/celery-worker-error.log

[program:beat]
command=/path/to/venv/bin/celery beat -A projectname --loglevel=info --pidfile=/tmp/celerybeat.pid
directory=/path/to/projectdir
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/path/to/projectdir/logs/celery-beat.log
stderr_logfile=/path/to/projectdir/logs/celery-beat-error.log

以上配置文件中分别配置了一个名字为worker的Celery worker和一个名字为beat的Celery beat,其中需要修改的地方主要有以下几个参数:
- command:Celery命令的具体内容,需要替换为自己项目中Celery的启动命令。
- directory:你的项目在服务器中的具体路径。
- user: 运行程序的用户,默认为root用户,需要根据自己的服务器配置修改。
- stdout_logfilestderr_logfile:输出的日志文件路径,需要替换成自己项目中的日志路径。

启动Supervisord服务

  1. 首先需要生成Supervisord service文件:
echo_supervisord_conf > /etc/systemd/system/supervisord.service
  1. 编辑Supervisord service文件:
[Unit]
Description=Supervisor daemon
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl shutdown
ExecReload=/usr/local/bin/supervisorctl reload
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target
  1. 启动Supervisord服务:
systemctl daemon-reload
systemctl start supervisord
systemctl enable supervisord

示例说明

以下为两个使用Supervisord后台启动Celery服务的示例:

示例一

假设我们需要在Django项目中使用Celery处理异步任务,在Linux服务器上执行,我们可以按以下步骤使用Supervisord后台启动Celery worker和beat:

  1. 先使用pip安装Celery:pip install Celery
  2. 创建Django项目,并配置Celery
  3. 编写Supervisord的配置文件:
[program:worker]
command=/path/to/venv/bin/celery worker -A projectname --loglevel=info --concurrency=4 -Ofair
directory=/path/to/projectdir
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/path/to/projectdir/logs/celery-worker.log
stderr_logfile=/path/to/projectdir/logs/celery-worker-error.log

[program:beat]
command=/path/to/venv/bin/celery beat -A projectname --loglevel=info --pidfile=/tmp/celerybeat.pid
directory=/path/to/projectdir
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/path/to/projectdir/logs/celery-beat.log
stderr_logfile=/path/to/projectdir/logs/celery-beat-error.log
  1. 保存文件并重启Supervisord服务:systemctl restart supervisord
  2. 通过Supervisord的Web管理界面查看worker和beat的状态:http://服务器IP地址:9001

示例二

假设我们已经有了一个运行在Linux服务器上的Django项目,并且已经配置了Celery处理异步任务,我们可以按以下步骤使用Supervisord后台启动Celery worker和beat:

  1. 先安装Supervisord:pip install supervisor
  2. 编辑Supervisord配置文件:sudo vim /etc/supervisord.conf
  3. 添加以下内容:
[program:worker]
command=/path/to/venv/bin/celery worker -A projectname --loglevel=info --concurrency=4 -Ofair
directory=/path/to/projectdir
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/path/to/projectdir/logs/celery-worker.log
stderr_logfile=/path/to/projectdir/logs/celery-worker-error.log

[program:beat]
command=/path/to/venv/bin/celery beat -A projectname --loglevel=info --pidfile=/tmp/celerybeat.pid
directory=/path/to/projectdir
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/path/to/projectdir/logs/celery-beat.log
stderr_logfile=/path/to/projectdir/logs/celery-beat-error.log
  1. 保存文件并重启Supervisord服务:systemctl restart supervisord
  2. 通过Supervisord的Web管理界面查看worker和beat的状态:http://服务器IP地址:9001

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python测试开发django之使用supervisord 后台启动celery 服务(worker/beat) - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 基于Django signals 信号作用及用法详解

    针对“基于Django signals 信号作用及用法详解”的完整攻略,我将从以下几个方面为您做出详细讲解: 什么是Django signals信号? Django signals信号的作用是什么? Django signals信号的使用步骤 示例1:在添加或更新Model时向消息队列写入新数据 示例2:注册一个新用户时向管理员发送电子邮件提示 接下来我们逐…

    人工智能概览 2023年5月25日
    00
  • 扫描仪一点通

    “扫描仪一点通”完整攻略 简介 “扫描仪一点通”是一款针对Windows系统的扫描仪驱动管理软件,主要作用是为电脑上安装的扫描仪设备提供最新的驱动程序和管理工具,方便用户管理使用扫描仪。本攻略主要介绍该软件的安装和使用方法,以及常见问题的解决办法。 安装步骤 步骤1:下载安装程序 访问”扫描仪一点通”官方网站(http://www.scanok.com/),…

    人工智能概览 2023年5月25日
    00
  • 基于Java生成图片验证码的方法解析

    基于Java生成图片验证码的方法解析 验证码(captcha)是用于识别用户身份、防止恶意攻击等安全性操作中常用的一种技术手段。使用Java语言可以很方便地生成图片验证码。本文将介绍基于Java生成图片验证码的方法,包括工具、实现步骤、示例演示等。 工具 在Java中,我们可以使用开源的Kaptcha库来生成验证码图片。Kaptcha库提供了丰富的参数配置选…

    人工智能概论 2023年5月25日
    00
  • SpringCloud hystrix断路器与局部降级全面介绍

    SpringCloud Hystrix断路器与局部降级全面介绍 什么是Hystrix断路器 Hystrix是Netflix发布的一款容错框架,用于处理分布式系统的延迟和容错问题。Hystrix在整合了SpringCloud项目之后,是同步、异步请求的断路器。 断路器是对延迟和故障的容错,当请求后端服务出现链路故障、返回超时等,断路器会直接断开请求链路,避免系…

    人工智能概览 2023年5月25日
    00
  • Python OpenCV读取显示视频的方法示例

    下面是完整攻略: Python OpenCV读取显示视频的方法示例 简介 OpenCV是一款开源的计算机视觉库,拥有许多图像和视频处理的功能。本篇文章将详细讲解如何使用Python和OpenCV读取并显示视频的方法示例。 准备工作 在使用此方法前,需要准备好以下环境: Python 3.x OpenCV库 可以使用pip命令安装OpenCV库: pip in…

    人工智能概论 2023年5月24日
    00
  • google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)

    下面就来详细讲解一下“Google jQuery 引用文件,jQuery 引用地址集合(jQuery1.2.6至jQuery1.5.2)”的完整攻略。 1. Google jQuery 引用文件 Google 提供了 CDN(内容分发网络)来加速开发者网页内容的传输。通过使用 Google 提供的在线库,可以让用户在访问网站时更快地下载页面所需的文件和其他内…

    人工智能概论 2023年5月25日
    00
  • Nginx源码研究之nginx限流模块详解

    首先,需要明确Nginx限流模块的概念,即通过对请求的流量进行控制和限制,保护服务端资源免受过载而导致的服务不可用或响应缓慢。下面是nginx限流模块的完整攻略。 1. 理解Nginx限流模块的工作原理 Nginx限流模块的工作原理是基于Token Bucket算法,该算法与令牌桶算法类似,主要由三个核心参数组成:令牌速率,桶容量和最大可用令牌数。其中,令牌…

    人工智能概览 2023年5月25日
    00
  • django 使用 request 获取浏览器发送的参数示例代码

    下面是一份关于”Django 使用 request 获取浏览器发送的参数示例代码”的攻略: 步骤一:浏览器输入 URL 地址 在浏览器中输入 URL:http://example.com/mysite/myview/?name=John&age=30 步骤二:urls.py 文件中设置 URL 映射规则 在 urls.py 文件中设置 URL 的映射…

    人工智能概论 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部