supervisor
使用Python编写的进程管理程序supervisor来管理Python程序那是最合适不过了,supervisor基于CS架构,主要有以下两个组成部分:
- supervisord:supervisord是supervisor的服务端程序。负责启动子程序,应答客户端命令,子程序日志记录,对进程变化发送事件通知等
- supervisorctl: 客户端命令行工具,可以连接服务器端,进行进程的启动、关闭、重启、状态查看等。重要的一点是,supervisorctl不仅可以连接到本机上的supervisord,还可以连接到远程的supervisord,当然在本机上面是通过UNIX socket连接的,远程是通过TCP socket连接的。supervisorctl和supervisord之间的通信,是通过xml_rpc完成的。 相应的配置在[supervisorctl]块里面
安装
基于ubuntu16.04,不同linux发行版均可使用包管理器进行安装,也可以使用源码安装和pip安装
apt-get install python-setuptools
apt-get install supervisor
pip安装方法
pip install supervisor
当前最新版本3.3.3,supervisord.conf 和supervisord.d文件夹已自动生成在/etc/supervisor/目录下。可以使用echo_supervisord_conf命令将配置信息重定向到制定目录,比如/etc
echo_supervisord_conf > /etc/supervisor/supervisord.conf
服务端启动
supervisord -c /etc/supervisor/supervisord.conf
查看supervisord是否在运行
ps aux | grep supervisord
supervisord.conf详解
使用echo_supervisord_conf查看supervisord.conf可选的配置项:
echo_supervisord_conf help
详情如下
; Sample supervisor config file.
;
; For more information on the config file, please see:
; http://supervisord.org/configuration.html
;
; Notes:
; - Shell expansion ("~" or "$HOME") is not supported. Environment
; variables can be expanded using this syntax: "%(ENV_HOME)s".
; - Comments must have a leading space: "a=b ;comment" not "a=b;comment".
[unix_http_server]
file=/tmp/supervisor.sock ; socket 文件路径
;chmod=0700 ; socket 文件 模式 (默认 0700)
;chown=nobody:nogroup ; socket file uid:gid owner
;username=user ; 使用supervisorctl连接的用户,默认没有用户
;password=123 ; 使用supervisorctl连接的用户密码,默认没有密码
;[inet_http_server] ; Web Server和远程的supervisorctl 配置块(默认关闭)
;port=127.0.0.1:9001 ; 监听的地址和端口
;username=user ; 登录用户,默认没有用户
;password=123 ; 登录密码,默认没有密码
[supervisord]
logfile=/tmp/supervisord.log ; supervisord进程日志路径
logfile_maxbytes=50MB ; supervisord进程单个日志文件大小,默认为50M
logfile_backups=10 ; 日志文件个数,默认为10个
loglevel=info ; 日志级别,默认为info,还支持debug,warn,trace)
pidfile=/tmp/supervisord.pid ; supervisord的pid文件路径。
nodaemon=false ; 如果是true,supervisord进程将在前台运行 默认为false(后台运行)
minfds=1024 ; 这个是最少系统空闲的文件描述符,低于这个值supervisor将不会启动
minprocs=200 ; 最小可用的进程描述符,低于这个值supervisor也将不会正常启动
;umask=022 ; 进程创建文件的掩码 (默认 022)
;user=chrism ; user参数指定的用户也可以对supervisord进行管理
;identifier=supervisor ; supervisord的标识符