supervisor简介:
linux后台进程运行有好几个状态,例如nohup 但是,如果是一个服务程序,要可靠在后台运行,我们就需要把他做成deamon 最好还要监控进程状态,在意外结束时,能自动重启。
supervisor就是用pathon写的一套通用的进程管理程序,能将一个普通的命令行进程变成后台deamon 并监控进程状态,异常退出时能自动重启。

线上环境服务停止:
1、手动停止
2、可以通过集群和负载均衡方式
3、supervisor

好处:
1、出现问题,可以马上拉起程序
2、启动自动化,减少人为失误

--------------------坏处------------------
程序本身有bug
但是对系统环境产生了影响,
open-files //系统文件链接数
一个系统有n个程序,其中一个对系统产生影响, supervisor加剧影响,影响了其他程序。

安装:

yum install python-setuptools -y
wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz
tar zxvf supervisor-3.1.3.tar.gz
cd supervisor-3.1.3
python setup.py install
1、安装完毕后,可以使用以下命令来测试安装是否成功:

echo_supervisord_conf

2、创建配置目录及主配置文件
[root@prd3-redis01-10-183 ~]# mkdir /etc/supervisor
[root@prd3-redis01-10-183 ~]# ls -l /etc/supervisor/
total 0
[root@prd3-redis01-10-183 ~]# echo_supervisord_conf > /etc/supervisor/supervisord.conf

这样,我们便生成了 Supervisor 的主配置文件supervisord.conf。
为了将 Supervisor 管理的进程配置与主配置文件区分开来,我们创建独立的目录来存放进程配置。  
cd /etc/supervisor
mkdir conf.d
[root@prd3-redis01-10-183 ~]# cd /etc/supervisor/
[root@prd3-redis01-10-183 supervisor]# ll
total 12
-rw-r--r-- 1 root root 8574 Jun 11 14:09 supervisord.conf
[root@prd3-redis01-10-183 supervisor]# mkdir conf.d

然后,修改主配置文件 supervisord.conf,添加以下配置,将 conf.d 目录下的进程配置引入 Supervisor 管理:

[include]
files = /etc/supervisor/conf.d/*.ini
5. 运行 supervisord

由于我们需要使用指定目录下的 Supervisor 主配置文件,在运行 Supervisord 时,需要使用-c参数来指定主配置文件的路径:

supervisord -c /etc/supervisor/supervisord.conf

6. 使用 supervisorctl 管理进程

使用 supervisorctl 可以查看监控的进程状态:

supervisorctl -c /etc/supervisor/supervisord.conf

[root@prd3-redis01-10-183 conf.d]# which supervisord
/usr/bin/supervisord
[root@prd3-redis01-10-183 conf.d]# cat redis.ini 
[program:redis]
command=/usr/local/bin/redis-server /ivargo/app/redis/conf/6379.conf
autostart=true
autorestart=true
startsecs=3
startretries=3 
stdout_logfile=/opt/redisstdout.log
stderr_logfile=/opt/redisstderr_error.log

参考:

[program:redis_7000]
directory = /Users/xinxingegeya/IDE/redis/redis_7000 ; 程序的启动目录
command = /usr/local/bin/redis-server /Users/xinxingegeya/IDE/redis/redis_7000/7000.conf  ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true     ; 在 supervisord 启动的时候也自动启动
autorestart = true   ; 程序异常退出后自动重启
startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
startretries = 3     ; 启动失败自动重试次数,默认是 3
user = xinxingegeya          ; 用哪个用户启动
redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20     ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /Users/xinxingegeya/IDE/redis/log/redis_7000_stdout.log

参考链接:https://www.cnblogs.com/Dicky-Zhang/p/6171954.html
利用Supervisor管理Redis进程的方法教程 https://www.jb51.net/article/122534.htm
官网: http://supervisord.org/introduction.html
https://my.oschina.net/xinxingegeya/blog/659095