本文作者:陈进坚
博客地址:https://jian1098.github.io
CSDN博客:https://blog.csdn.net/c_jian
联系方式:[email protected]
做过系统软件开发的人都会遇到,如果写好的程序需要在Linux
后台运行时不太好处理,用nohup
和&
放到后台的话,很难对线程进行停止和重启操作。Supervisor
(http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的实现启动、重启、关闭进程、意外停止自动重启、日志分割等功能。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动,同时Supervisor
提供web管理页面可以进行远程管理,非常方便。
supervisor
Centos
[root@ztg ~]# yum install epel-release #如果已经有python环境可以跳过前两步
[root@ztg ~]# yum install -y python-pip
[root@ztg ~]# pip install supervisor
Ubuntu
[root@ztg ~]# apt-get install supervisor
supervisor
生成配置文件
[root@ztg ~]# echo_supervisord_conf > /etc/supervisord.conf
如果出现下面的错误
Traceback (most recent call last):
File "/usr/bin/supervisord", line 5, in
from pkg_resources import load_entry_point
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 2655, in
working_set.require(__requires__)
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: meld3>=0.6.5
请以此执行下面4行命令再生成配置文件
[root@ztg ~]# wget https://pypi.python.org/packages/source/m/meld3/meld3-1.0.2.tar.gz
[root@ztg ~]# tar -zxf meld3-1.0.2.tar.gz
[root@ztg ~]# cd meld3-1.0.2
[root@ztg ~]# python setup.py install
编辑/etc/supervisord.conf
,在最后增加要自定义运行程序的配置信息:(举例的httpserver是用golang实现的简单的http服务程序)
[root@ztg ~]# vi /etc/supervisord.conf
[program:httpserver]
command=/bin/bash -c "/home/ztg/httpserver"
autostart=true
autorestart=true
startsecs=10
stdout_logfile=/var/log/go_http_server_info.log
stdout_logfile_maxbytes=2MB
stdout_logfile_backups=30
stdout_capture_maxbytes=2MB
stderr_logfile=/var/log/go_http_server_error.log
stderr_logfile_maxbytes=2MB
stderr_logfile_backups=30
stderr_capture_maxbytes=2MB
配置说明
[program:程序名]
command=/bin/bash -c "需要执行的命令,多句命令用分号隔开"
autostart=true 是否跟随supervisor一起启动
autorestart=true 如果该程序挂了,是否重新启动
startsecs=10
stdout_logfile=/var/log/go_http_server_info.log 终端标准输出重定向文件
stdout_logfile_maxbytes=2MB 文件最大大小
stdout_logfile_backups=30 文件备份最大数量
stdout_capture_maxbytes=2MB
stderr_logfile=/var/log/go_http_server_error.log 终端错误输出重定向文件
stderr_logfile_maxbytes=2MB
stderr_logfile_backups=30
stderr_capture_maxbytes=2MB
supervisor
启动supervisor,使用默认配置文件:
$ supervisord
或者指定配置文件:
$ /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
命令
$ supervisorctl
httpserver RUNNING pid 34236, uptime 0:00:28
supervisor> stop httpserver
httpserver: stopped
supervisor
提供了可视化的Web管理页面,允许远程操作,但是需要在配置文件手动打开。
打开配置文件
$ vi /etc/supervisord.conf
将下面几行前面的分号去掉,修改一下数据保存退出
[inet_http_server] ; HTTP 服务器,提供 web 管理界面
port=192.168.1.194:9001 ; Web 管理后台运行的 IP 和端口,如果开放到公网,需要注意安全性
username=user ; 登录管理后台的用户名
password=123 ; 登录管理后台的密码
重新载入配置
$ supervisorctl reload
在浏览器打开刚刚配置的ip和端口(192.168.1.194:9001)即可弹出登录框进入管理页面。
访问配置文件中定义的日志文件即可
$ tail -f /var/log/go_http_server_info.log
$ tail -f /var/log/go_http_server_error.log