Skip to content

supervisor 是 linux 和 unix 系统下基于 python 开发的的一个进程管理器,主要用来将一些普通运行的进程实现守护进程化运行的工作,相比于 linux 下自带的进程管理方式他的优势在于 supervisor 能够监听进程,并在进程崩溃后自动的拉起新的运行进程。

supervisor 实现守护进程话的方式非常巧妙,其使用 fork/exec 的方式将被管理的进程作为 supervisor 的子进程启动。这样当子进程挂掉的时候,父进程就能够及时的感知子进程的变化,从而实现对进程的自动重启的功能。

安装环境要求

由于 supervisor 基于 python 构建,所以要想正常的使用 supervisor 必须先安装 python2.4 及以上的版本。这里的安装使用 centos7.2 系统 yum 的安装方式为例。

安装 python

首先使用下边的命令更新系统软件,以防止一些本过低,出现安装无法正常进行的状况。

shell
yum -y update

然后执行如下命令安装 python,系统默认将会为你安装 2.7 版本的 python。如果此版本不能满足你今后使用,也可以参考python 官网按照文档安装合适自己使用的版本。

shell
yum -y install python

安装 supervisor

supervisor 是使用 python 构建的所以你可以使用如下的命令去安装 supervisor。

shell
yum -y install python-setuptools
easy_install supervisor

除了典型的使用 Python easy_install 的安装方式以外,现在在 centos 上你也可以使用 yum 的方式安装 supervisor

shell
yum install supervisor

安装完成之后可以使用 service supervisor start 的方式启动 supervisor 程序。

supervisor 的使用

supervisor 提供了 supervisorctl 客户端用于管理和查看相关的进程。

shell
supervisorctl start process_name
supervisorctl stop process_name
supervisorctl restart process_name
supervisorctl status process_name
supervisorctl reread
supervisorctl update

supervisor 的配置目录在/etc/supervisor/conf.d 下默认情况下程序回家载文件夹下所有的.conf 文件,所以新增运行程序是只需要在该文件下新增文件,重启进程即可。 下面结合 laravel 队列的监听,做一下讲解。

  1. 在/etc/supervisor/conf.d 目录下创建一个 laravel-process.conf。
  2. 在文件中写入如下的内容。
shell
[program:laravel-process] //设置启动脚本的命令
process_name=%(program_name)s_%(process_num)02d //设置进程的process_name
command=php /home/web/blog/artisan queue:work sqs --sleep=3 --tries=3 //执行脚本文件
autostart=true //supervisor启动时自动启动进程
autorestart=true //进程挂掉后自动重启
user=forge //启动脚本的用户名
numprocs=8 //启动多少个子进程
redirect_stderr=true
stdout_logfile=/home/web/blog/process.log //日志文件
  1. 如下命令启动对队列的监听,至此你的 laravel 队列就跑在了 supervisor 下再也不用担心意外而导致进程挂掉了。
shell
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-process:*