在我的Django项目中,我使用Celery和Rabbitmq在后台运行任务。
我正在使用芹菜节拍调度程序来运行定期任务。
如何以编程方式检查芹菜节拍是否已启动并正在运行?
- 你为什么要这么做?您要在发送任务之前检查吗?
- 原因之一是如果celerybeat未运行,则启动故障转移。似乎没有一种可接受的方式来实现这一目标。
-
如果是这样,那么最好使用
supervisord 之类的东西。 - 这是一个真正的问题。最近,我们的一个模块发生了故障,该模块依靠芹菜拍打来运行重要的面包屑。原来是上星期五,几台服务器出现了暂时的网络中断,其中一台托管了我们的Rabbitmq安装。一小时内将其恢复。但是由于无法重新连接,芹菜拍打导致整个系统几乎一直持续到星期一早上。甚至我也在寻找一种可靠的方式来对其进行监视。找到了这个,但是最新版本github.com/KristianOellegaard/…不支持python 2.7。
使任务定期发送HTTP请求到Ping URL。如果未按时ping通URL,URL监视器将向您发送警报。
1 2 3 4 5 6 7 8 | import requests from yourapp.celery_config import app @app.task def ping(): print '[healthcheck] pinging alive status...' # healthchecks.io works for me: requests.post("https://hchk.io/6466681c-7708-4423-adf0-XXXXXXXXX") |
此celery定期任务计划每分钟运行一次,如果未完成ping操作,则您的节拍服务已关闭*,监视器将启动您的邮件(或网络挂机,因此您可以通过zapier来获取移动推送通知)以及)。
1 | celery -A yourapp.celery_config beat -S djcelery.schedulers.DatabaseScheduler |
*或不知所措,您应该跟踪任务的完成情况,这是Celery的噩梦,应该被检测并正确解决,当工作人员忙于阻塞需要优化的任务时经常发生
- 这是错误的,因为当时工人可能会倒下。
- 如果您说" hchk.io"可能会关闭,那么确实是这样,然后例如依赖于类似于aws的lambda函数。如果您的意思是芹菜"工人"没错,因为如果工人死亡,ping服务将等待他说"我还活着",否则"它已经死了",这就是这种服务的重点。
我最近针对相同的问题使用了类似于@panchicore建议的解决方案。
我的工作场所中的问题是处理芹菜节拍的重要系统,有时是由于RabbitMQ中断或我们的服务器与RabbitMQ服务器之间的某些连接问题,由于芹菜节拍不再停止触发克朗,除非重新启动。
由于我们没有任何方便的工具,因此,为了监视通过HTTP发送的
如果您已按照celery文档的教程将celery守护化,则可以通过
来检查其是否正在运行。
1 2 | sudo /etc/init.d/celeryd status sudo /etc/init.d/celerybeat status |
您可以在python模块中使用此类命令的返回。
n
您可能可以查找主管。
它提供了一个celerybeat conf,可将与节拍相关的所有信息记录在
解决此问题的另一种方法是使用Flower。您可以为服务器设置它(确保其密码受保护),在GUI中注意到正在排队的任务以及何时排队的任务会更容易一些,从而验证您的节拍是否运行良好。
您是否使用新贵或监管人员或其他工作来运行芹菜工作者将芹菜节拍作为后台任务?在生产中,您应该使用其中之一来运行芹菜工作者在后台运行芹菜节拍。
运行芹菜节拍的最简单方法是:
您还可以检查芹菜工作者的状态:
如果您对高级芹菜监控感兴趣,可以阅读官方文档监控指南。
- 虽然这不是编程方式
您可以通过以下命令检查调度程序是否运行:
1 | python manage.py celery worker --beat |
- @MohammedShareefC您安装了
celery 吗?并且您是否将celery 添加到已安装的应用程序中? -
@MohammedShareefC,您可以通过运行
python manage.py 检查可用命令的列表 -
我没有安装djcelery应用。它解决了这个问题。但是,当我安装它时,它开始给出
cannot import models 错误,指向我的项目代码中的一行。仅当我使用芹菜时才会发生这种情况。