YiluPHP
这家伙很懒,什么都没有留下...

经验 linux centos7下安装supervisor及使用讲解

浏览数 191574 最后修改时间
当我们需要让一个PHP队列始终在后台运行,我们可以采用php /data/web/www.lumen.com/artisan queue:work --sleep=1 --tries=3 --daemon &后台运行方式,该方式存在一个缺点,如果服务器重启后,或者程序运行出错的话,服务就会终止,这种方式不稳定。

采用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
# mkdir /etc/supervisor/
# 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 进程:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /data/web/www.lumen.com/artisan queue:work --sleep=1 --tries=3 --daemon
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/logs/laravel-worker.log   #日志文件
PHP

这个例子里的 numprocs 命令会要求 Supervisor 运行并监控 8 个 queue:work 进程,并且在它们运行失败后重新启动。当然,你必须更改 command 命令的 queue:work sqs,以显示你所选择的队列驱动。

当这个配置文件被创建后,你需要更新 Supervisor 的设置,并用以下命令来启动该进程:

sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl start laravel-worker:*
PHP

一切准备完毕后 执行

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/laraveldemo.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/laraveldemo.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



我来说说