线上使用celery和supervisor+redis做异步消息处理时遇到一些问题的笔记

环境 描述:项目主要是是基于celery和supervisor+redis+bottle这些来组成,
在bottle运行的时候,为提高响应的速度,部分的处理转移给了celery做异步。但是在部署的时候出现了一些问题。
问题 【线上使用celery和supervisor+redis做异步消息处理时遇到一些问题的笔记】相关的项目已部署完成,在运行的celery -A async_tasks worker
的时候出现了各种问题
1:开始以为是使用的python环境不对,需要修改一下/usr/bin/celery 文件的下的python环境,但是启动还是不行
2:仔细查看对应的错误日式是说redis连接的时候密码连接有问题,去除中文的redis密码,再次启动。
3:这时候出现先的问题是 说是找不到命令,但是我直接的使用 celery -A async_tasks worker到对应的目录下执行是可以的

[root@web1 xxxx_sys2]# celery -A async_tasks worker --loglevel=info

线上使用celery和supervisor+redis做异步消息处理时遇到一些问题的笔记
文章图片
xxxxxxx 4:修改c/usr/bin/celery--->elery
[program:celery_for_xxxxxx] command=celery -A async_tasks worker; supervisord将要执行的运行celery服务的命令 directory=/data/www/xxxxxxxx_sys2 stdout_logfile=/data/logs/celery/xxxxxx_sys2_celery.log; supervisord当前这个test服务运行产生的日志存储路径,方便我们查看运行情况 socket-timeout=3 autostart=true autorestart=true redirect_stderr=true stopsignal=QUIT

查看实时日志不输出

线上使用celery和supervisor+redis做异步消息处理时遇到一些问题的笔记
文章图片
image.png 5:重启的启动还是找不到对应的命令,或文件找不到,重新找其他问题,还是无法使用supervisor来启动
[root@web1 iread_business_management_sys2]# supervisorctl celery_for_iread_businessFATALExited too quickly (process log

其他错误:

线上使用celery和supervisor+redis做异步消息处理时遇到一些问题的笔记
文章图片
image.png 6:尝试使用supervisor 重新的reload 所有的进程!-OK!启动成功了!
[root@web1 iread_business_management_sys2]# ps -ef|grep celery root11160 104890 19:05 pts/000:00:00 grep --color=auto celery [root@web1 iread_business_management_sys2]# ps -ef|grep celery root11162 104890 19:05 pts/000:00:00 grep --color=auto celery [root@web1 iread_business_management_sys2]# ps -ef|grep celery root11164 104890 19:05 pts/000:00:00 grep --color=auto celery [root@web1 iread_business_management_sys2]# ps -ef|grep celery root11167 104890 19:05 pts/000:00:00 grep --color=auto celery [root@web1 iread_business_management_sys2]# ps -ef|grep celery root11169 104890 19:05 pts/000:00:00 grep --color=auto celery [root@web1 iread_business_management_sys2]# [root@web1 iread_business_management_sys2]# supervisorctl celery_for_iread_businessFATALcan't find command '/usr/bin/celery' cu_iread_web_server_qtRUNNINGpid 11061, uptime 0:07:20 cu_iread_web_server_qt2RUNNINGpid 11060, uptime 0:07:20 iread_business_management_sys2_1RUNNINGpid 11058, uptime 0:07:20 iread_business_management_sys2_2RUNNINGpid 11059, uptime 0:07:20 testRUNNINGpid 11062, uptime 0:07:20 supervisor> reload Really restart the remote supervisord process y/N? y Restarted supervisord supervisor> status celery_for_iread_businessSTARTING cu_iread_web_server_qtSTARTING cu_iread_web_server_qt2STARTING iread_business_management_sys2_1STARTING iread_business_management_sys2_2STARTING testSTARTING supervisor> status celery_for_iread_businessRUNNINGpid 11175, uptime 0:00:18 cu_iread_web_server_qtRUNNINGpid 11176, uptime 0:00:18 cu_iread_web_server_qt2RUNNINGpid 11174, uptime 0:00:18 iread_business_management_sys2_1RUNNINGpid 11172, uptime 0:00:18 iread_business_management_sys2_2RUNNINGpid 11173, uptime 0:00:18 testRUNNINGpid 11177, uptime 0:00:18 supervisor>

--------------------------------------------------2018年3月21日 17:17:02------------------------------------
PS:如果线上使用到其他celcey启动多个任务对象,需要使用不对的数据库ID,如:
celery_for_iread_business
celery_for_ixxxxxxxx-------对应的不同任务,配置的数据库ID 也需要不一样

    推荐阅读