主要目的
使用thinkphp框架自带的queue扩展,实现消息队列服务,并使用supervisor保护进程。
环境准备
- centos6,centos6与centos7在某些地方存在些许差异,本次使用的是6
- thinkphp主框架,这里使用的是5.1.*版本
- think-queue扩展,通过composer安装,注意,不同版本对主框架版本要求也有所区别,这里为了对应主框架的5.1版本,所以指定版本为2.0.4
composer create-project topthink/think 2.0.4
- Redis , 虽然支持使用数据库做为存储环境,但是并不推荐,这里依然使用Redis,具体安装方式可参看其他教程。
- python
- supervisor
文档参考
- think-queue git说明文档
- think-queue composer 说明
- centos6.5安装配置supervisor
- CentOS7 下 安装 supervisor
- centos7安装supervisor详细教程
安装supervisor
- 获取supervisor包
wget https://pypi.python.org/packages/80/37/964c0d53cbd328796b1aeb7abea4c0f7b0e8c7197ea9b0b9967b7d004def/supervisor-3.3.1.tar.gz
-
解压supervisor-3.3.1.tar.gz 并安装
tar zxvf supervisor-3.3.1.tar.gz && cd supervisor-3.3.1 python setup.py install
【可能报错】:ImportError: No module named setuptools
【解决办法】:没有setuptools的模块,说明python缺少这个模块,那我们只要安装这个模块即可解决此问题
wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz tar zxvf setuptools-0.6c11.tar.gz && cd setuptools-0.6c11 python setup.py build python setup.py install
-
创建supervisor的配置文件
echo_supervisord_conf > /etc/supervisord.conf
- 在配置文件底部新增
[program:luna_queue] ;项目名称 directory = /www/wwwroot/luna ; 程序的启动目录 command = php think queue:listen --queue mainQueue ; 启动命令 process_name=%(program_name)s_%(process_num)02d numprocs = 3 ; 开启的进程数量 autostart = true ; 在 supervisord 启动的时候也自动启动 startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了 autorestart = true ; 程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数,默认是 3 user = www ; 用哪个用户启动 redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes = 50MB ; stdout 日志文件大小,默认 50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数 ; stdout 日志文件,需要手动创建目录(supervisord 会自动创建日志文件) stdout_logfile = /www/wwwroot/luna/runtime/log/queue_worker.log loglevel=info
开启supervisord服务
# supervisord -c /etc/supervisord.conf
更新新的配置到supervisord
# supervisorctl update
重新启动配置中的所有程序
# supervisorctl reload
启动某个进程(program_name=你配置中写的程序名称)
# supervisorctl start program_name
查看正在守候的进程
# supervisorctl
重启某一进程 (program_name=你配置中写的程序名称)
# supervisorctl restart program_name
停止全部进程
# supervisorctl stop all
查看supervisor是否启动成功
# ps -ef|grep supervisord
终止supervisor进程
# kill -s 9 端口号
如果遇到报错,相关报错详情一般可以在对应日志(1.supervisor运行日志与2.需要守护的进程的运行日志)中找到,对症下药即可,日志目录在配置文件中可以看到默认配置,也可以重新指定。如果报错信息很少,比如守护进程日志里只提示到什么遇到致命错误关闭过快然后就没了,推荐更换supervisor的安装方式=L=,我就在这折腾了好几天...