linux centos7下安装supervisor及使用讲解
采用supervisor进程管理方式守护PHP文件的运行,保证程序的持续运行。这也是laravel的队列推荐使用的方法。
https://d.laravel-china.org/docs/5.2/queues#running-the-queue-listener
一、 安装supervisor
1 2 3 4 5 6 | # yum install python-setuptools # easy_install pip
# pip install supervisor 或者 easy_install supervisor 安装完成之后,在/etc/supervisor目录下生成配置文件 # echo_supervisord_conf>/etc/supervisor/supervisord.conf |
1 | 如果需要卸载supervisor 执行 # pip uninstall supervisor |
修改supervisor配置文件
1 | vi /etc/supervisor/supervisord.conf |
把末尾的include去掉;添加配置文件
1 2 | [include] files = /etc/supervisor/conf.d/*.conf |
conf.d文件夹中的laravel-worker.conf配置文件如下
Supervisor 的配置文件一般是放在 /etc/supervisor/conf.d
目录下,在这个目录中你可以创建任意数量的配置文件来要求 Supervisor 监控你的进程。例如我们创建一个 laravel-worker.conf
来启动与监控一个 queue:work
进程:
这个例子里的 numprocs
命令会要求 Supervisor 运行并监控 8 个 queue:work
进程,并且在它们运行失败后重新启动。当然,你必须更改 command
命令的 queue:work sqs
,以显示你所选择的队列驱动。
当这个配置文件被创建后,你需要更新 Supervisor 的设置,并用以下命令来启动该进程:
一切准备完毕后 执行
supervisord -c /etc/supervisor/supervisord.conf
启动supervisor,即可完成程序的持续运行!
运行 supervisorctl命令即可查看程序的运行状态
1 2 3 | [root @appadmin conf.d]# supervisorctl appadmin:appadmin_00 RUNNING pid 2375 , uptime 0 : 26 : 40 supervisor> |
一些supervisor的常用命令
1 2 3 4 5 6 7 8 | 重载supervisor 进入supervisor 命令--> #supervisorctl 查看命令 --> #help 重载项目 --> #reload 查看状态 --> #status 启动任务 --> #start 任务名称 停止任务 --> #stop 任务名称 完成! |
二、设置supervisor开机自起:
重启服务器后,发现supervisor开机启动,于是只好手动添加脚本 实现开机启动
编辑sh文件并给予权限
1 2 3 4 5 | [root @centos ]# vim /etc/rc.d/sh/laraveldemo.sh #!/bin/bash # 开机启动supervisor supervisord -c /etc/supervisor/supervisord.conf chmod +x /etc/rc.d/sh/
|
编辑/etc/rc.d/rc.local 加入开机启动
1 2 3 4 5 6 7 | [root @appadmin conf.d]# vi /etc/rc.d/rc.local #!/bin/bash touch /var/lock/subsys/local #开机启动supervisor脚本 /etc/rc.d/sh/
chmod +x /etc/rc.d/rc.local |
重启服务器后,即可看到已经有 app_admin在运行中。
至此,所有操作进行完毕
我在一次新服务器的部署,在启动supervisor时报了以下错误:
Unlinking stale socket /tmp/supervisor.sock
查了近一个小时,最后找到原因,原来是引入所有配置设置错误
vim /etc/supervisor/supervisord.conf
我忘记把[include]前面的;去掉了
;[include]
;files = relative/directory/*.ini
files = /etc/supervisor/conf.d/*.conf
正确的应该是
[include]
;files = relative/directory/*.ini
files = /etc/supervisor/conf.d/*.conf