背景

在进行celery定时任务测试时,发现到点任务并未执行,检查了log发现在启动celery beat的时候有这样一个报错,所以celery beat并未启动成功。

1
2
3
4
(hzinfo) E:PythonWorkSpacehzinfo>celery beat v3.1.0 (Cipater) is starting.
ERROR: Pidfile (celerybeat.pid) already exists.
Seems we're already running? (pid: 22220)
* Restarting with stat

排查

celery beat在运行时,会自动创建两个文件:

  • pidfile:默认为celerybeat.pid,保存在项目根目录。
  • scheduler:默认为celerybeat-schedule,保存在项目根目录。

这里的报错说明pidfile已存在。

看下官网的说明

–pidfile

File used to store the process pid. Defaults to celerybeat.pid.

The program won’t start if this file already exists and the pid is still alive.

上次运行的时候,已经自动创建了,进程结束的时候并未自动删除,从而导致再次运行的时候报错了。

直接删除这个pidfile文件,再次启动celery beat

大专栏  celery beat之pidfile already exists问题e class="highlight shell">

1
celery -A manage.celery beat -s "celery_app/celerybeat-schedule"

运行成功了。

那么难道每次重启都得先删除么?

虽然官网上没提,但是参考网上说法,如果在启动celery beat的时候配置pidfile参数,并将该参数设置为空,可以规避这个问题。

1
start /b celery -A manage.celery beat -s "celery_app/celerybeat-schedule" --pidfile=

测试了下,果然并没有生成pidfile,且程序也运行成功了。

总结

celery beat在运行时会生成一个pidfile文件用于记录当前的pid。且该文件不会因进程的结束而自动删除。当再次创建celery beat进程的时候,会因为已存在这个文件而启动失败。

解决方式有两种:

  • 在启动前检测是否存在改文件并删除后再启动

  • 通过启动时指定空参数的方式规避:

    1
    celery -A manage.celery beat -s "celery_app/celerybeat-schedule" --pidfile=

celery beat之pidfile already exists问题的更多相关文章

  1. Celery beat实现定时/轮询任务

    Celery定时任务 配置 启用Celery的定时任务需要设置CELERYBEAT_SCHEDULE .  Celery的定时任务都由celery beat来进行调度.celery beat默认按照s ...

  2. django 异步任务实现及Celery beat实现定时/轮询任务

    Celery定时任务 requirements celery==3.1.25 异步任务 django-celery==3.2.2 定时任务管理包 redis==2.10.6 django-redis- ...

  3. [python基础] celery beat/task/flower解析

    一.Celery 介绍 Celery 是一个强大的分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行.我们通常使用它来实现异步任务( async task )和定时任务( ...

  4. celery beat - 心跳包

    celery -A 项目名 beat -l info -S django# 启动心跳任务 celery -A 项目名  worker -l info # 启动1个worker去执行

  5. windows中执行celery beat任务

    由于最新的celery4.2不支持windows系统,因此按照网上的建议安装了3.1.25版.按照官网的说明使用 app.conf.beat_schedule = { 'add-every-30-se ...

  6. django+celery 实现定时任务

    利用 celery 实现定时任务 celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat Celery安装 由于celery 4. ...

  7. Celery的实践指南

    http://www.cnblogs.com/ToDoToTry/p/5453149.html Celery的实践指南   Celery的实践指南 celery原理: celery实际上是实现了一个典 ...

  8. Python 任务队列 Celery

    一. celery 简介 Celery 是一个专注于实时处理和任务调度的分布式任务队列, 同时提供操作和维护分布式系统所需的工具.. 所谓任务就是消息, 消息中的有效载荷中包含要执行任务需要的全部数据 ...

  9. 定时任务调度-Celery

    确保任务不重叠解决方法: from celery import task from celery.five import monotonic from celery.utils.log import ...

随机推荐

  1. 分布式ID的简单总结

    来源:郴州网站优化 简单总结一下流行的分布式id的实现方法 雪花算法 snowflake是twitter开源的分布式ID生成算法. 核心思想是:分布式ID固定是一个long型的数字,一个long型占8 ...

  2. [ZJOI2019]Minimax搜索(线段树+动态DP+树剖)

    为什么我怎么看都只会10pts?再看还是只会50~70?只会O(n2(R-L+1))/O(nlogn(R-L+1))……一眼看动态DP可还是不会做…… 根节点的答案是叶子传上来的,所以对于L=R的数据 ...

  3. learning Perl:91行有啥用? 88 print "\n----------------------------------_matching_multiple-line_text--------------------------\n"; 91 my $lines = join '', <FILE>;

    89 open FILE, "< file_4_ex_ch7.txt"     90     or die "cannot open file: $!"; ...

  4. Matlab高级教程_第二篇:关于MATLAB转C#过程中遇到输出两组参数的问题

    1. 在matlab的m函数很可能遇到原函数[a,b] = func(a); 这样的两个输出参数. 2. 在观察C#生成后定义中我们发现: public MWArray HP(); public MW ...

  5. [LC] 207. Course Schedule

    There are a total of n courses you have to take, labeled from 0 to n-1. Some courses may have prereq ...

  6. orthologs|paralogs

    从这里我们可以举例说明,例如人的S100A8基因与猪的S100A8基因即为orthologs.人的a球蛋白和b球蛋白基因即为paralogs.需要补充的是,人的a球蛋白和鼠的b球蛋白基因也为paral ...

  7. js - 观察者模式与订阅发布模式

    零.序言 转载&参考: 1.JavaScript 设计模式系列 - 观察者模式 2.JavaScript 设计模式(六):观察者模式与发布订阅模式 一.观察者模式(observer) 概要: ...

  8. Java面试题4-附答案

    BIO.NIO和AIO的区别   Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程 ...

  9. 收集到的技术相关网址——python

    1.Python中常用数据库访问接口模块 专用数据库连接模块——MySQL.SQLite.PostgreSQL.Oracle.IBM DB2.Infomix.Interbase.Sybase.SQL ...

  10. python3多线程应用详解(第二卷:多线程到底是怎么工作的)

    现在很多人都说用多线程工作快是因为多个不同任务可以同时执行,注意我说的是不同任务,要是重复做一件事达到相同效果就是画蛇添足了,其实这是个错误的说法,线程真正的本质是无法同时执行的.现在我们来看下多线程 ...