前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >守护进程Supervisor

守护进程Supervisor

作者头像
兜兜转转
发布2023-03-06 15:14:13
7940
发布2023-03-06 15:14:13
举报
文章被收录于专栏:CodeTime

介绍

在一个分布式环境中,每台机器上可能需要启动和停止多个进程,使用命令行方式一个一个手动启动和停止非常麻烦,而且查看每个进程的状态也很不方便。为此Supervisor工具应运而生,它能够对很方便的对多个进程进行简单高效中心化管理。

安装

1

yum install supervisor

直接yum安装会报一个No package supervisor available.的错误,因为CentOS是RedHat企业版编译过来的,去掉了所有关于版权问题的东西。需先安装epel-release

1

yum install epel-release

如果执行yum install epel-release出现No package epel-release available错误,可执行下面的代码解决:

12

wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmrpm -ivh epel-release-latest-7.noarch.rpm

配置

安装完成后执行如下命令,生成默认配置文件:

1

echo_supervisord_conf > /etc/supervisord.conf

修改配置文件vim /etc/supervisord.conf,将最后两行修改为:

12

[include]files = supervisord.d/*.ini

表示包含/etc/supervisord.d下的所有ini后缀的配置文件,其中每个ini代表一个进程的启动配置。 一个jar进程的配置文件示例:

123456789101112131415161718

[program:demo]command=/usr/bin/java -jar /root/demo.jardirectory=/rootpriority=90numprocs=1autostart=trueautorestart=truestartsecs=10startretries=10exitcodes=0stopsignal=KILLstopwaitsecs=10;Logstderr_logfile=/root/logs/error.logstdout_logfile=/root/logs/info.logredirect_stderr=truestdout_logfile_maxbytes=20MBstdout_logfile_backups=20

主要参数介绍:

  • directory:执行目录,若有/home/test/test1.py;将directory设置成/home/test,则command只需设置成python test1.py
  • numprocs:进程数量;
  • priority:优先级,值越小优先级越高,默认值999;值越小,最先启动,并且最后被关闭;
  • autostart:如果是true,当supervisor启动时程序将会自动启动;
  • autorestart:程序异常退出后自动重启;
  • startsecs:启动后程序需要保持运行的总秒数,则认为启动成功(将进程状态从STARTING标记为RUNNING),默认1秒;
  • startretries:启动失败自动重试次数,默认3次;
  • redirect_stderr:把 stderr 重定向到 stdout,默认 false;

更多配置文件说明,可参见官方文档:http://supervisord.org/configuration.html#program-x-section-values

启动,停止,查看服务状态:

123

systemctl start supervisordsystemctl stop supervisordsystemctl status supervisord

管理进程

启动,停止,重启,查看状态:

1234

supervisorctl start demosupervisorctl stop demosupervisorctl restart demosupervisorctl status

重新加载进程配置文件:

12

supervisorctl rereadsupervisorctl update

按组划分进程

supervisor可以通过设置优先级按顺序启动进程,但不支持等待上个进程完再执行下一个进程,在github上存在这个open issue

可通过给进程划分组的方式变相实现,首先修改配置文件vim /etc/supervisord.conf,为进程设置组:

123

[group:mygroup]programs=demo1,demo2 ; each refers to 'x' in [program:x] definitionspriority=999 ; the relative start priority (default 999)

之后再延迟手动启动组内进程:

1

supervisorctl restart mygroup:*

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 安装
  • 配置
  • 管理进程
    • 按组划分进程
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档