2012-06-30 6 views
4

Я строю проект с бутылкой, и мне нужно, чтобы он периодически выполнял определенные запланированные действия.Celerybeat не работает должным образом

Я решил пойти с кроликом + сельдерей, так как это казалось самым прочным & полным решением для управления запланированными работами программно.

Я установил как кролик, так и сельдерей в порядке, и когда я использую celeryd-B, задачи выполняются в порядке. Однако, когда я использую команду celerybeat, задачи «отправляются» (или так говорит вывод, потому что я запускаю как celeryd, так и celerybeat с опцией -l debug, чтобы быть более подробным), но, хотя они регулярно «отправляются», они не 't быть выполненным (для целей тестирования задача должна добавить текущую временную метку к файлу каждые 60 секунд). В любом случае все остальное отлично работает, так как команда celeryd -B в том же каталоге работает очень хорошо, она записывает файл в ожидаемые промежутки времени.

Я что-то упустил?

Вот вывод $ celerybeat -l отлаживать:

[2012-06-30 18:07:44,676: WARNING/MainProcess] celerybeat v2.5.5 is starting. 
[2012-06-30 18:07:44,750: WARNING/MainProcess] __ - ... __ -  _ 
Configuration -> 
    . broker -> amqp://[email protected]:5672// 
    . loader -> celery.loaders.default.Loader 
    . scheduler -> celery.beat.PersistentScheduler 
    . db -> celerybeat-schedule 
    . logfile -> [stderr]@DEBUG 
    . maxinterval -> 5.00 minutes (300s) 
[2012-06-30 18:07:44,751: DEBUG/MainProcess] Setting default socket timeout to 30 
[2012-06-30 18:07:44,751: INFO/MainProcess] Celerybeat: Starting... 
[2012-06-30 18:07:44,776: DEBUG/MainProcess] Current schedule: 
<Entry: celery.backend_cleanup celery.backend_cleanup() {<crontab: 0 4 * (m/h/d)>} 
<Entry: often tasks.output() {<freq: 1.00 minute>} 
[2012-06-30 18:07:44,776: DEBUG/MainProcess] Celerybeat: Ticking with max interval->5.00 minutes 
[2012-06-30 18:07:44,781: DEBUG/MainProcess] Start from server, version: 8.0, properties: {u'information': u'Licensed under the MPL. See http://www.rabbitmq.com/', u'product': u'RabbitMQ', u'copyright': u'Copyright (C) 2007-2012 VMware, Inc.', u'capabilities': {}, u'platform': u'Erlang/OTP', u'version': u'2.8.4'}, mechanisms: [u'PLAIN', u'AMQPLAIN'], locales: [u'en_US'] 
[2012-06-30 18:07:44,785: DEBUG/MainProcess] Open OK! known_hosts [] 
[2012-06-30 18:07:44,787: DEBUG/MainProcess] using channel_id: 1 
[2012-06-30 18:07:44,789: DEBUG/MainProcess] Channel open 
[2012-06-30 18:07:44,790: INFO/MainProcess] Scheduler: Sending due task tasks.output 
[2012-06-30 18:07:44,794: DEBUG/MainProcess] Celerybeat: Synchronizing schedule... 
[2012-06-30 18:07:44,838: DEBUG/MainProcess] tasks.output sent. id->53951ab0-022d-40a5-9f56-9a4a294294c7 
[2012-06-30 18:07:44,838: DEBUG/MainProcess] Celerybeat: Waking up in 1.00 minute. 
+0

Спасибо за внимание к деталям, @Taras. Как бы то ни было, ответ на этот вопрос кажется, что для того, чтобы функционировать сельдерей, необходим параллельный процесс использования сельдерея. Если кто-то думает о своей ошибке, добавьте свой ответ. –

+0

Да, это правильно - celerybeat расписал задачи, которые затем селедничает и фактически выполняет. Спасибо за продолжение @toninoj – Taras

ответ

0

Celerybeat, само по себе, просто сохраняет время и лопаты задач на соответствующую очередь для кого-то другого, чтобы потребить.

Ergo, начать процесс celeryd прослушивания очереди (ы) вы хотите обрабатывать:

$ celeryd <queuename> -l DEBUG 
Смежные вопросы