本文作者:陈进坚
博客地址:https://jian1098.github.io
CSDN博客:https://blog.csdn.net/c_jian
联系方式:jian1098@qq.com
前言
做过系统软件开发的人都会遇到,如果写好的程序需要在Linux
后台运行时不太好处理,用nohup
和&
放到后台的话,很难对线程进行停止和重启操作。Supervisor
(http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的实现启动、重启、关闭进程、意外停止自动重启、日志分割等功能。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor
同时启动所有应用程序而不是一个一个地敲命令启动,同时Supervisor
提供web管理页面可以进行远程管理,非常方便。
安装supervisor
Centos
1 | [root@ztg ~]# yum install epel-release #如果已经有python环境可以跳过前两步 |
Ubuntu
1 | [root@ztg ~]# apt-get install supervisor |
配置supervisor
生成配置文件
1 | [root@ztg ~]# echo_supervisord_conf > /etc/supervisord.conf |
如果出现下面的错误
1 | Traceback (most recent call last): |
请以此执行下面4行命令再生成配置文件
1 | [root@ztg ~]# wget https://pypi.python.org/packages/source/m/meld3/meld3-1.0.2.tar.gz |
编辑/etc/supervisord.conf
,在最后增加要自定义运行程序的配置信息:(举例的httpserver是用golang实现的简单的http服务程序)
1 | [root@ztg ~]# vi /etc/supervisord.conf |
1 | [program:httpserver] |
配置说明
1 | [program:程序名] |
操作supervisor
启动supervisor,使用默认配置文件:
1 | $ supervisord |
或者指定配置文件:
1 | $ /usr/bin/supervisord -c /etc/supervisord.conf |
启动supervisor
之后可以执行supervisorctl
相关命令
supervisorctl
常用命令:
命令 | 说明 |
---|---|
supervisorctl stop program_name | 停止某个进程 |
supervisorctl start program_name | 启动某个进程 |
supervisorctl restart program_name | 重启某个进程 |
supervisorctl stop all | 停止全部进程 |
supervisorctl reload | 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程 |
supervisorctl update | 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启 |
查看运行状态并进入控制台,在控制台中执行命令可以省去supervisorctl
命令
1 | $ supervisorctl |
Web管理页面
supervisor
提供了可视化的Web管理页面,允许远程操作,但是需要在配置文件手动打开。
打开配置文件
1 | $ vi /etc/supervisord.conf |
将下面几行前面的分号去掉,修改一下数据保存退出
1 | [inet_http_server] ; HTTP 服务器,提供 web 管理界面 |
重新载入配置
1 | $ supervisorctl reload |
在浏览器打开刚刚配置的ip和端口(192.168.1.194:9001)即可弹出登录框进入管理页面。
查看日志
访问配置文件中定义的日志文件即可
1 | $ tail -f /var/log/go_http_server_info.log |