supervisor 初步使用
文章目录
Linux的后台进程运行有好几种方法,例如nohup,screen等,但是,如果是一个服务程序,要可靠地在后台运行,我们就需要把它做成daemon,最好还能监控进程状态,在意外结束时能自动重启。
supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
大概原理是,将 supervisord.conf 中的配置作为子进程启动,这样就可以控制其整个生命周期,并进行监控。
安装
ubuntu 可以使用 apt-get install supervisor
,CentOS 可以使用 yum install supervisor
。
也可以使用 easy_install,执行 easy_install supervisor
,或者使用 pip,执行 pip install supervisor
。
配置
在终端执行 echo_supervisord_conf
会将默认配置输出到终端,可以使用 echo_supervisord_conf > /etc/supervisord.conf
来生成默认配置文件。
配置文件搜索优先级:
- $CWD/supervisord.conf
- $CWD/etc/supervisord.conf
- /etc/supervisord.conf
- /etc/supervisor/supervisord.conf (since Supervisor 3.3.0)
- ../etc/supervisord.conf
- ../supervisord.conf
也可以在其他的目录生成后,启动 supervisord 时使用 -c
选项来指定配置文件,例如 supervisord -c path/to/supervisord.conf
。
主要命令
主要命令有两个,一个是 supervisord
,用来启动 supervisor 服务。一个是 supervisorctl
,用来控制 supervisor,包含 start, stop, restart 等。
测试
测试文件,test.sh:
|
|
我们新建一个配置文件,然后在主配置文件中的 [include] 块中引入,(这是比较建议的方式,如果配置文件比较长,使用这种方式可以便于管理):
|
|
|
|
然后执行 supervisord -c supervisord.conf
来启动服务,启动后执行 supervisorctl
进入 supervisor 控制台,可以看到进程们的状态。
[ins@centos-test ~]$ supervisorctl bar:00 RUNNING pid 6189, uptime 0:03:40 bar:01 RUNNING pid 6190, uptime 0:03:40
在 tmp
目录下,可以看到 bar_00.log 和 bar_01.log 文件,里面是命令的输出。
tip:stdout_logfile 选项中的路径必须存在,不然会报错。
在控制台内输入 help
可以查看控制台内命令。
tip:在测试时可能会频繁修改配置,修改后在控制台里执行
reload
就可以重新加载配置,不用重启服务。
其他
web server
supervisor 还有 web server,在配置文件中的 [inet_http_server] 块中配置,配置后可通过web页面管理进程。
XML_RPC 接口
supervisor 提供 XML_RPC 来方便外部调用,并且有很多第三方类(包括php)。
其他
supervisord.conf 中包含很多种控制块,可以实现不同的功能。supervisor 还提供 事件监听 功能。