1

「再起動防止」になるように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では、apt付きのrabbitmq-server、pip付きのdjango-celeryをvirtualenvにインストールしてから、https://github.com/ask/celery/tree/master/contrib/debianから取得した「celeryd」initscriptをシンボリックリンクしました。 /etc/init.dの/init.d、virtualenvからのdjangocelerydを使用するように/etc/ default / celerydで構成し、経由で「再起動防止」にしました(おそらく「デフォルト」が問題ですか?)

update-rc.d celeryd defaults

celerydとcelerybeatを別々のinitscriptで実行するのではなく、Beatを含めるようにcelerydを構成しました(おそらくそれが問題ですか?):

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...

しかし、私は手動の手順の必要性を排除する必要があります。

4

2 に答える 2

1

celerybeatのブローカーサービスへの依存は確かに問題でした。initscriptをインストールするのではなく

update-rc.d celeryd defaults

開始および強制終了のシーケンス番号20としてrabbitmq-serverスクリプトがインストールされている場合、celerybeatの依存関係は、rabbitmq-serverの後に明示的に開始する(およびその前に強制終了する)ことによって解決する必要があります。

update-rc.d celeryd defaults 21 19

注意:実際には、-B呼び出しではなく、個別のcelerybeatサービスを選択しましたが、そのスクリプト、つまり問題のあるスクリプトに対しては2119のみを実行しました。

于 2011-06-15T09:17:59.817 に答える
0

問題はセロリ自体ではなく、スクリプトにあると思います。おそらくセロリが起動したとき、ブローカーはまだリッスンしていません。私はほぼ同じコマンドを使用していますが、問題はありません。-Bオプションを指定してcelerydスクリプトを起動するのは間違いではありません。再起動スクリプトでは、おそらく接続のテストを行って、celerydを起動する前にrabbitmqが完全に再起動するのを待つ必要があると思います。

于 2011-06-14T07:26:18.737 に答える