завершение работы сельдерея - порядок initscript? - PullRequest
1 голос
/ 13 июня 2011

Я пытаюсь настроить rabbitmq / celery / django-celery / django так, чтобы он был «перезагружаемым», т. Е. Все просто возвращается само собой. Кажется, все работает нормально, кроме этого:

Когда я перезагружаюсь, все службы запускаются, но кажется, что celeryd запускается раньше, чем rabbitmq, а впоследствии celerybeat прерывается, потому что не может подключиться (?):

[2011-06-14 00:48:35,128: WARNING/MainProcess] celery@inquire has started.
[2011-06-14 00:48:35,130: INFO/Beat] child process calling self.run()
[2011-06-14 00:48:35,131: INFO/Beat] Celerybeat: Starting...
[2011-06-14 00:48:35,134: ERROR/MainProcess] Consumer: Connection Error: [Errno 111] Connection refused. Trying again in 2 seconds...
[2011-06-14 00:48:35,688: INFO/Beat] process shutting down
[2011-06-14 00:48:35,689: WARNING/Beat] Process Beat:
[2011-06-14 00:48:35,689: WARNING/Beat] Traceback (most recent call last):
...
[2011-06-14 00:48:35,756: WARNING/Beat] File "/home/inquire/inquire.env/lib/python2.6/site-packages/amqplib/client_0_8/transport.py", line 220, in create_transport
[2011-06-14 00:48:35,760: WARNING/Beat] return TCPTransport(host, connect_timeout)
[2011-06-14 00:48:35,761: WARNING/Beat] File "/home/inquire/inquire.env/lib/python2.6/site-packages/amqplib/client_0_8/transport.py", line 58, in __init__
[2011-06-14 00:48:35,761: WARNING/Beat] self.sock.connect((host, port))
[2011-06-14 00:48:35,761: WARNING/Beat] File "<string>", line 1, in connect
[2011-06-14 00:48:35,761: WARNING/Beat] error: [Errno 111] Connection refused
[2011-06-14 00:48:35,761: INFO/Beat] process exiting with exitcode 1
[2011-06-14 00:48:37,137: ERROR/MainProcess] Consumer: Connection Error: [Errno 111] Connection refused. Trying again in 4 seconds...

В Ubuntu я установил rabbitmq-сервер с apt, django-celery с pip в virtualenv, а затем вставил символизированный текст «celeryd», полученный из https://github.com/ask/celery/tree/master/contrib/debian/init.d в /etc/init.d, настроил его в / etc / default / celeryd использовать django celeryd из моего virtualenv и сделать его «перезагружаемым» через (может быть, проблема в «defaults»?)

update-rc.d celeryd defaults

Вместо того, чтобы запускать celeryd и celerybeat с отдельными initscripts, я просто настроил celeryd для включения Beat (может, в этом проблема?):

CELERYD_OPTS="-v 2 -B -s celery -E"

Есть какие-нибудь указатели, как решить эту проблему?

Если я

sudo /etc/init.d/celeryd restart

жалоб нет:

[2011-06-14 00:54:29,157: WARNING/MainProcess] celery@inquire has started.
[2011-06-14 00:54:29,161: INFO/Beat] child process calling self.run()
[2011-06-14 00:54:29,162: INFO/Beat] Celerybeat: Starting...

но мне нужно избавиться от необходимости каких-либо ручных шагов.

Ответы [ 2 ]

1 голос
/ 15 июня 2011
Зависимость

celerybeat от брокерского сервиса была действительно проблемой.Вместо того, чтобы устанавливать initscript с

update-rc.d celeryd defaults

со сценарием rabbitmq-server, устанавливаемым как порядковый номер 20 для запуска и уничтожения, зависимость celerybeat должна быть разрешена путем явного запуска его после (и уничтожения его раньше) rabbitmqсервера с помощью

update-rc.d celeryd defaults 21 19

Примечание: я фактически выбрал отдельную службу celerybeat вместо вызова -B, и сделал только 21 19 для этого сценария, т.е.проблема.

0 голосов
/ 14 июня 2011

Я думаю, что проблема не в самом сельдерее, а в вашем сценарии, вероятно, когда celeryd запускается, брокер еще не слушает.Я использую почти ту же команду, и у меня нет никаких проблем, запуск скрипта celeryd с опцией -B не является ошибочным.Я думаю, что в вашем сценарии перезагрузки вы должны дождаться полного перезапуска rabbitmq, прежде чем запускать celeryd, возможно, с проверкой соединения тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...