介绍
supervisor是一个利用python开发的进程管理工具,可以控制其所管理的进程,包括但不限于其所管理程序异常退出时的重启
安装
利用linux自带的包管理命令或者python的包管理命令即可安装
Debian
apt-get install supervisor
Cent
yum install supervisor
Arch
pacman -S supervisor
pip
pip install supervisor
配置文件
不同的安装方式配置文件所在的目录可能有所差异,甚至没有生成默认的配置文件,以arch为例配置文件在/etc目录下,路径为/etc/supervisord.conf
。一般来说/etc目录就是存放各种配置文件的。如果配置文件不存在,或者想修改配置文件目录,使用下面命令:
echo_supervisord_conf > /路径名/supervisord.conf
重点关注文件最后两行,
[include]
/etc/supervisor.d/*.ini
这里写的是所管理的进程的配置文件所在路径以及文件格式,可以看到默认的是.ini
文件也可以修改为.conf
文件
启动supervisord
第一次启动命令
supervisord -c /etc/supervisord.conf
设置开机自启
systemctl enable supervisord
子进程配置文件
正如上面所介绍,supervisor的子进程配置文件目录已经在supervisord.conf文件中写好,或者你也可以修改为自定义的目录,
supervisord管理的进程可以有多个,多个进程的配置文件可以写在多个文件中,也可以写在一个配置文件中,通常是一个项目相关的进程写在一个文件中,
配置文件模版(.conf文件):
[program:blog] ;项目名
directory=/opt/bin ;脚本目录
command=/usr/bin/python /opt/bin/test.py ;脚本执行命令
autostart=true ;supervisor启动的时候是否随着同时启动,默认True
autorestart=false ;当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的
startsecs=1 ;这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1
user = test ;脚本运行的用户身份
stderr_logfile=/tmp/blog_stderr.log ;标准错误日志输出
stdout_logfile=/tmp/blog_stdout.log ;标准输出日志输出
redirect_stderr = true ;把stderr重定向到stdout,默认 false
stdout_logfile_maxbytes = 20MB ;stdout日志文件大小,默认 50MB
stdout_logfile_backups = 20 ;stdout日志文件备份数
supervisorctl命令
supervisorctl status //查看所有进程的状态
supervisorctl stop es //停止es
supervisorctl start es //启动es
supervisorctl restart //重启es
supervisorctl update //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序
注:把es
换成all
可以管理配置中的所有进程。直接输入supervisorctl
进入supervisorctl的shell交互界面,此时上面的命令不带supervisorctl可直接使用。