这篇东西想写很久了,拖延症晚期患者-.-,今天终于下决心把它写了吧。
很久很久之前,在思考如何部署基于Tornado的服务,就和郑纪一起找到了一个Tornado的好伙伴——Supervisor。
Supervisor,简单来说,就是一个Python写的进程管理器。不仅仅可以用来管理进程,还可以用来做开机启动。
我在服务器上面有几个服务:
需求是,对于这些服务能够做到如下:
- 重启机器后,能够自启动。
- 平时有个方便的进程查看方式。
- 能够有个方便的方式重启进程。
虽然我们自己写启动脚本,但是其实还是挺烦的,特别是,我要开多个同样的服务,就要写几份几乎一样的启动脚本,这个十分之冗余。
庆幸的是,Supervisor[1]可以解决这些问题,安装好Supervisor,仅需要为Supervisor弄份启动脚本,便可以一劳永逸。
安装
非常熟悉的安装方式:sudo pip install supervisor
,便可以拥有Supervisor,如果没有启动脚本,可以从这里下载一份,放置到/etc/init.d/
下面便可。
配置
我们可以看到启动脚本中,其实默认写了一个启动参数-c /etc/supervisord.conf
,这里我们可以通过Supervisor附送的贴心的小脚本生成默认的配置文件echo_supervisord_conf > /etc/supervisord.conf
。
我们可以根据需要修改里面的配置。我这里,每个不同的项目,使用了一个单独的配置的文件,放置在/etc/supervisor/
下面,于是修改/etc/supervisord.conf
,加上如下内容:
1 | [include] |
修改完后,我们便可以将项目的配置文件命名为.conf
放置在/etc/supervisor/
下面即可。
这里有个163.gs站点的配置文件163.gs.conf,使用了virtualenv,启动了两个Tornado进程。
1 | [program:163gs] |
更多详细的配置可以围观supervisor官方文档
使用
放置完配置文件后,我们使用service supervisor restart
启动一下服务(如果是刚刚安装完,那么还没有supervisor进程,如果已经启动了,那么跳过这步)。
当我们需要管理进程的时候,使用supervisor的控制程序连接服务便可以很方便的查看经常状态和管理进程了:
1 | @ ~ # supervisorctl |
对于使用,直接输入help,就可以看到常用的命令,至于命令是啥意思,可以直接help那个命令,就可以看到解释了。
升级Supervisor
升级Supervisor也是非常简单的,使用pip install --upgrade supervisor
既可以更新程序,然后使用service supervisor restart
重启一下,就可以升级完成。
我在Github有我的服务器配置supervisor_conf,有兴趣可以看看。
好,打完收工。