2011-06-13 27 views
1

我试图安装rabbitmq/celery/django-celery/django,这样它就可以“重新启动”了,也就是说它全部都是自动备份的。一切似乎除了这个工作的罚款:celerybeat shutdown - initscript命令?

当我重新启动,所有服务上手,但它似乎是celeryd RabbitMQ的前开始,并celerybeat被随后终止,因为它无法连接(?):

[2011-06-14 00:48:35,128: WARNING/MainProcess] [email protected] 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,django-celery和pip将rabbitmq-server安装到我的virtualenv中,然后将/ etc/init.d中的https://github.com/ask/celery/tree/master/contrib/debian/init.d的“celeryd”initscript配置到/ etc/default /芹菜使用从我virtualenv django芹菜,并通过(可能“默认”是问题?),使其“重新启动”

update-rc.d celeryd defaults 

而不是运行celeryd和celerybeat有独立的启动脚本,我刚刚配置celeryd,包括拍(也许这就是问题?):

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

任何指针如何解决这个问题?

如果我

sudo /etc/init.d/celeryd restart 

有没有投诉:

[2011-06-14 00:54:29,157: WARNING/MainProcess] [email protected] 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... 

,但我需要消除任何手动操作的需要。

回答

1

celerybeat对经纪人服务的依赖确实是问题所在。 而不是安装与

update-rc.d celeryd defaults 

与RabbitMQ的服务器脚本的启动脚本被安装为起始序列号20和杀害,celerybeat的依赖必须由后明确地启动它(和之前杀死它)的RabbitMQ服务器来解决通过使用

update-rc.d celeryd defaults 21 19 

注:其实我已经选择了独立celerybeat服务,而不是-B调用,并且只做21 19 脚本,即一个的问题。

+1

我仍然发现celerybeat可以从与celeryd具有相同的重试行为中受益,并提交了相应的功能请求:https://github.com/ask/celery/issues/419 – 2011-06-15 09:36:20

+1

仅供参考此行为现在已实施用于celerybeat :https://github.com/ask/celery/commit/8ac05a37e2a5ba9099b5ca21b17d138be4c24222(报告后两小时 - 哇!) – 2011-06-15 22:30:06

0

我认为问题不在芹菜它自己,而是在你的脚本,可能当芹菜开始经纪人不听。 我使用几乎相同的命令,我没有任何问题,用-B选项启动celeryd脚本没有错。 我认为,在您的重启脚本中,您必须等待rabbitmq在启动celeryd之前完全重启,也许还需要进行连接测试。

+0

感谢您的回答。似乎芹菜本身似乎并不介意经纪人还没有听(2秒后再试......,4秒后再试......)。然而,celerybeat被终止了,我想可能将celerybeat作为一项服务运行(而不是-B的“分拆”)会让我产生类似的重试行为。会尝试几件事情。 – 2011-06-14 22:32:31