工具使用场景:唐丁在实际中经常会需要在linux端长时间启动某个项目或者希望某个项目在开机后自动启动,并且能够在出现异常的情况下自动重启。
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。
简而言之,相对于linux的systemctl等进程管理工具的好处有以下几点:
1、可以准确获取被管理的子进程的状态;
2、子进程出现异常情况会自动重启;
3、可以按组进行集中式管理
安装
# centos
yum install supervisor
# pip
pip install supervisor
以yum安装为例,执行以上安装命令后在/etc目录下会生成supervisord.conf,这是supervisor的配置文件,同时在/usr/bin目录下出现supervisord和supervisorctl。supervisord是supervisor的服务端程序,supervisorctl是客户端程序。
配置文件
//上面的配置文件默认生成的一般就可以使用了,简单说一下这个include
// 这个东西挺有用的,当我们要管理的进程很多的时候,写在一个文件里面就有点大了。我们
// 以把配置信息写到多个文件中,然后include过来
[include]
files=relative/directory/*.ini
将需要管理的进程写进.ini文件中,格式如下
[program:donding-api]
directory = /opt/donding
command = /usr/local/bin/gunicorn --config ./conf/gunicorn.conf.py donding.wsgi:application
stopasgroup = true
killasgroup = true
autostart = true
startsecs = 3
autorestart = true
startretries = 3
user = root
redirect_stderr = true
stdout_logfile_maxbytes = 10MB
stdout_logfile_backups = 3
stdout_logfile = /var/log/supervisord-donding-api.log
然后执行以下命令启动
supervisord
supervisorctl reload
项目运行情况如下图
supervisorctl常用命令
supervisorctl status //查看所有进程的状态
supervisorctl stop es //停止es
supervisorctl start es //启动es
supervisorctl restart //重启es
supervisorctl update //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序
注:把es换成all可以管理配置中的所有进程。直接输入supervisorctl进入supervisorctl的shell交互界面,此时上面的命令不带supervisorctl可直接使用。
这个工具非常适合在本地虚拟机或者在云服务器上管理自己的一些小项目。在实际的生产环境中目前都采用了K8s,在集群中进行容器化部署。这块后面唐丁会专门进行讲解。感谢大家关注唐丁,后面再见~~