laravel中supervisor应用和配置

管理员

supervisor

supervisor简介

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。

在 Laravel 中,我们用来监护消息队列、Horizon 进程,以便在其意外退出时自动重启。

注:本文以centos7为例,supervisor版本4.2.2

superviso命令

supervisor安装完成后会生成三个执行程序:supervisortd、supervisorctl、echo_supervisord_conf:

  1. supervisortd:用于管理supervisor本身服务
  2. supervisorctl:用于管理我们需要委托给superviso工具的服
  3. echo_supervisord_conf:用于生成superviso的配置文件
[root@Jumpserver /]# which supervisord
/bin/supervisord
[root@Jumpserver /]# which supervisorctl
/bin/supervisorctl
[root@Jumpserver /]# which echo_supervisord_conf
/bin/echo_supervisord_conf

配置Supervisor

通过运行echo_supervisord_conf程序生成supervisor的初始化配置文件

mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf

修改配置文件,在文件末尾增加

[include]
files = /etc/supervisor/conf.d/*.conf

子进程配置文件路径

mkdir conf.d

给需要管理的子进程(程序)编写一个配置文件,放在/etc/supervisor/conf.d/目录下

项目名
[program:blog]
脚本目录
directory=/opt/bin
脚本执行命令
command=/usr/bin/python /opt/bin/test.py
supervisor启动的时候是否随着同时启动,默认True
autostart=true
当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的
autorestart=false
这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1
startsecs=1

脚本运行的用户身份 
user = test
启动N个进程
numprocs=4

这个和下面一个配置可以防止监护的进程意外重启后子进程残留
stopasgroup=true
killasgroup=true
把stderr重定向到stdout,默认 false
redirect_stderr = true
日志输出 
stdout_logfile=/tmp/blog_stdout.log 
stdout日志文件大小,默认 50MB
stdout_logfile_maxbytes = 20MB
stdout日志文件备份数
stdout_logfile_backups = 20
[program:test-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/vagrant/code/paopaoshou/artisan queue:work
autostart=true
autorestart=true
user=vagrant
numprocs=4
stopasgroup=true
killasgroup=true
redirect_stderr=true
stdout_logfile=/home/vagrant/code/paopaoshou/storage/supervisord-paopaoshou.log

使用命令supervisord -c /etc/supervisor/supervisord.conf启动。

supervisor命令说明
常用命令
supervisorctl status        //查看所有进程的状态
supervisorctl stop test-worker:*       //停止test-worker
supervisorctl start test-worker:*      //启动test-worker
supervisorctl restart test-worker:*      //重启test-worker
supervisorctl update        //配置文件修改后使用该命令加载新的配置
supervisorctl reload        //重新启动配置中的所有程序
注:把test-worker换成all可以管理配置中的所有进程。
直接输入supervisorctl进入supervisorctl的shell交互界面,此时上面的命令不带supervisorctl可直接使用。
使用supervisor进程管理命令之前先启动supervisord,否则程序报错。
0人点赞
Laravel
管理员

全部评论 0