celerybeat - 多个实例&监控

时间:2015-01-27 02:38:46

标签: python python-2.7 celery celerybeat

我使用芹菜制作应用程序,最近我们要求按计划运行某些任务。

我认为celerybeat是完美的,但我没有问题:

  1. 是否可以运行多个celerybeat实例,以便不重复任务?
  2. 如何确保celerybeat始终处于上升状态运行?
  3. 到目前为止,我读到了这个: https://github.com/celery/celery/issues/251https://github.com/ybrs/single-beat

    看起来应该运行celerybeat的单个实例。

    我在AWS elasticbeanstalk docker容器中运行应用程序,而芹菜工作者也是docker容器(因此它在需要时可以快速扩展)。

    最好让celerybeat与芹菜工人一起经营supervisord,但似乎这不是正确的方法。

    同时拥有celerybeat的单个实例需要手动配置/启动和监控。

3 个答案:

答案 0 :(得分:7)

回答你的两个问题:

  1. 如果你运行几个celerybeat实例,你会得到重复的任务,所以afaik你应该只有一个celerybeat实例。

  2. 我正如你所提到的那样使用supervisord来操作芹菜工人和芹菜工作者作为deamon所以他们应该总是和他们一起工作。运行

  3. 我的supervisord配置:

    [program:my_regular_worker]
    command=python2.7 /home/ubuntu/workspace/src/manage.py celery worker -Q my_regular_worker-queue_name -c 1 -l info --without-mingle
    process_name=my_regular_worker
    directory=/home/ubuntu/workspace/src
    autostart=true
    autorestart=true
    user=ubuntu
    stdout_logfile=/tmp/my_regular_worker.log
    redirect_stderr=true
    
    
    
    [program:my_celerybeat_worker]
    command=python2.7 /home/ubuntu/workspace/src/manage.py celery worker -Q my_celerybeat_worker-queue_name -c 1 -l info --without-mingle -B -s /tmp/celerybeat-schedule
    

答案 1 :(得分:0)

我刚刚发现这个解决方案为celery-beat replacement:RedBeat, 博客post

但是,他还没有使用它。

答案 2 :(得分:-3)

您可以运行芹菜节拍的多个实例,任务不会重复。

查看celery.beat.Scheduler类,特别是reserve()函数。调度程序将在将任务提交到网格以执行之前保留任务。这可以防止芹菜的另一个实例提交相同的任务。

我们使用MongoDB作为我们计划任务的后备存储。这是一个示例文档,显示该任务已由其中一个调度程序保留。

{
  "startdate": "2015-07-06 00:00:00", 
  "task": "cobalt.grid.tasks_facts.task_add", 
  "enddate": "2018-01-01 00:00:00", 
  "args": "[13.0, 42.0]", 
  "enabled": "True", 
  "last_run_at": "2015-08-13 15:04:49.058000", 
  "interval": "{u'every': u'1', u'period': u'minutes'}", 
  "relative": "False", 
  "total_run_count": "12", 
  "kwargs": "{}", 
  "reserved": "compute2:25703", 
  "_id": "ObjectId(55ccaf7784a3e752e73b08c2)", 
  "options": "{}"
}

http://celery.readthedocs.org/en/latest/reference/celery.beat.html#celery.beat.Scheduler