Supervisor是用Python开发的一个client/server服务,是Unix系统和类Unix系统下的一个进程管理工具。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
在Mac系统下,我们使用brew进行安装supervisor这个管理工具,安装命令是brew install supervisor:
从安装的信息中可以看到,有这样的一段话:
To have launchd start supervisor now and restart at login:
brew services start supervisor
Or, if you don't want/need a background service you can just run:
supervisord -c /usr/local/etc/supervisord.ini
这是supervisor的启动命令,brew services start supervisor是后台守护进程启动,另外一个就是在Terminal中启动运行,我们就用命令brew services start supervisor来启动supervisor:
使用命令supervisorctl进入命令管理界面:
会发现有一个refused connection的警告出现,那是我们启动命令管理界面的时候,没有指定配置文件,我们指定配置文件进行启动命令管理界面:
如上图,输入help可以看到命令管理界面支持的命令,下面就使用supervisor管理一个python进程,supervisor的配置文件和nginx的配置有着相似的地方,就是有一个主配置文件,那就是supervisord.ini,在这个配置文件的最后,有着这样配置:
所以其他的进程管理的配置文件我们放在supervisor.d的文件夹里,在这个文件夹里,我们新建一个myschool的进程管理配置文件:
其中[program:myschool]是我们对这个进程配置起的一个名称;
command是运行这个进程的指令;
directory是这个项目的主目录;
user是运行的用户;
autostart是自动启动;
autorestart是自动重启,这种情况是在进程不小心给挂掉了之后的保障机制;
startretries是启动重试次数,也就是启动不成功,重试的次数;
stdout_logfile和stderr_logfile是日志记录的文件路径
写完这个文件之后,我们进入supervisor的命令管理界面进行reload,reload之后可以输入status查看:
这时我们输入访问的地址,看一下服务是否正常:
服务访问正常,这个进程就被supervisor给管理起来了!当然我们也可以直接在命令行界面直接操作,操作命令如下:
supervisorctl stop test #终止特定的进程
supervisorctl stop all #终止所有进程
supervisorctl start test #开启特定的进程
supervisorctl start all #开启所有进程
sudo supervisorctl status #查看进程状态