Supervisor进程管理

Supervisor 介绍

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。

supervisor 安装

简单粗暴

yum install supervisor -y

supervisor 配置说明

通过这种形式安装的supervisor,其配置文件的目录位于:
/etc/supervisord.conf (主配置文件,下面会详细介绍)
/etc/supervisor.d/ (默认子进程配置文件,也就是需要我们根据程序配置的地方)

supervisord.conf 基本配置项说明,由于其参数比较多,这些只贴出一些常用的配置项,详细内容可参阅官网。温馨提示 “;” 符号是表示该行配置被注释。

[unix_http_server]
file=/home/supervisor/supervisor.sock   ; supervisorctl使用的 socket文件的路径
;chmod=0700                 ; 默认的socket文件权限0700
;chown=nobody:nogroup       ; socket文件的拥有者

[inet_http_server]         ; 提供web管理后台管理相关配置
port=0.0.0.0:9001          ; web管理后台运行的ip地址及端口,绑定外网需考虑安全性
;username=root             ; web管理后台登录用户名密码
;password=root

[supervisord]
logfile=/var/log/supervisord.log ; 日志文件,默认在$CWD/supervisord.log
logfile_maxbytes=50MB        ; 日志限制大小,超过会生成新文件,0表示不限制
logfile_backups=10           ; 日志备份数量默认10,0表示不备份
loglevel=info                ; 日志级别
pidfile=/home/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid              ; pid文件
nodaemon=false               ; 是否在前台启动,默认后台启动false
minfds=1024                  ; 可以打开文件描述符最小值
minprocs=200                 ; 可以打开的进程最小值

[supervisorctl]
serverurl=unix:///home/supervisor/supervisor.sock ; 通过socket连接supervisord,路径与unix_http_server->file配置的一致

[include]
files = supervisor.d/*.conf ;指定了在当前目录supervisor.d文件夹下配置多个配置文件
准备测试项目

这里我打包了一个简单的spring-boot程序,存放与”/opt/project/”下。

Supervisor进程管理

在这个程序中我们只是简单的定义了一个rest接口,主要用于演示作用。

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        return "hello world";
    }
}

如果不用supervisor的话,我们启动程序一般用一下命令

nohup java -jar springboot-hello-sample.jar &

这是以后台的方式启动jar包,程序运行相关输出会在nohup.out中,我们我们就不再赘述了,那么我们来看一下,切换到supervisor的方式,我们是怎么配置项目,以及管理的呢?

定义supervisor管理进程配置文件

从上面的配置文件[include]->files配置项我们可以知道,supervisor会把supervisor.d/下以conf结尾的配置文件都加载进来,那么我们在这个目录下面新建一个sboot.conf,内容如下:

[program:sboot] ;[program:xxx] 这里的xxx是指的项目名字
directory = /opt/project  ;程序所在目录
command =  java -jar springboot-hello-sample.jar ;程序启动命令
autostart=true ;是否跟随supervisord的启动而启动
autorestart=true; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
stopasgroup=true;进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true;向进程组发送kill信号,包括子进程
stdout_logfile=/var/log/sboot/supervisor.log;该程序日志输出文件,目录需要手动创建
stdout_logfile_maxbytes = 50MB;日志大小
stdout_logfile_backups  = 100;备份数

可以看到,在配置文件里面已经有配置该程序名,启动路径等,这样一来,supervisor就可以完全的掌管程序的生死了。接着我们执行

service supervisord restart

重启supervisord。

观察效果

浏览器输入:服务器ip:9001 (这里的web管理页面端口是在配置文件配置好的。)

Supervisor进程管理

如图所示,我们可以可以观察到springboot程序已经是running状态了,pid是27517,我们可以点击Tail -f拉力观察输出日志,它的作用跟我们在服务器直接”tail -f”是类似的。

Supervisor进程管理

这里我们为了方便延时就没有添加验证了,如果大家是在公网的使用环境,需要配置文件里面的用户名密码验证注释打开。不然别人扫出你的后台管理页面就可以随意控制程序了。

除了web管理页面,还有一些简单的命令也是需要我们掌握的。

直接在命令行输入supervisorctl会展示当前已配置好的项目信息。

[root@wangzh supervisor.d]# supervisorctl
sboot                            RUNNING   pid 27517, uptime 0:18:04
supervisor>

然后可以执行

start/stop/restart sboot 来简单控制项目的启停等
supervisorctl update #更新配置文件
supervisorctl reload #重新启动配置的程序
supervisorctl stop all #停止全部管理进程

结语

只需要一点简单的配置,就可以统一的管理我们的程序了,同时也可以在进程意外死掉的时候自动重启,这些工作以后就交给supervisor了,我们只要掌握一点简单的命令就可以”为所欲为”。

supervisor官网:http://www.supervisord.org/

Original: https://www.cnblogs.com/yaodun55/p/16011588.html
Author: 少年Dev
Title: Supervisor进程管理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/585556/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 多个USB转串口设备区分方法

    当计算机或者其他USB主机上使用多个USB转串口设备时,会遇到多个串口无法与具体的串口设备对应起来的问题,包括更换不同USB端口串口序号发生改变,多个设备USB插拔顺序不同导致串口…

    Linux 2023年6月7日
    061
  • LDD3第三章学习笔记

    思维导图 需求 实现一个设备/dev/scull,这个设备能用dd, cp, cat和Shell的IO重定向功能操作。 设备号 Linux用主次两个设备号去唯一的表示一个设备。其中…

    Linux 2023年6月7日
    094
  • 十二、启动流程

    启动流程介绍 现代计算机系统启动是硬件与软件复杂组合。从定义的端点开始,到拥有登录提示符的运行中系统,需要大量的硬件和软件配合工作。以下列表从较高层面概述了启动系统时所涉及的任务。…

    Linux 2023年6月7日
    0100
  • 当前硬件版本不支持设备“nvme”。 vmx 未能启动虚拟机 2022-06-30T06:44:04.446Z In(05)+

    由于系统发生了dwm.exe内存泄露问题,为了处理就更新了一下系统,再 我打开VMware的时候运行不了虚拟机 再此记录一下: 发生此问题是硬件兼容性问题,解决办法: 根据VMMw…

    Linux 2023年6月8日
    0255
  • 一文搞懂 Redis 架构演化之路

    这种方案就是我们经常听到的 Redis RDB,RDB 采用「 定时快照」的方式进行数据持久化,它的优点是: 持久化文件体积小(二进制 + 压缩) 写盘频率低(定时写入) 缺点也很…

    Linux 2023年5月28日
    083
  • Redis-firewall使用命令

    Redis-firewall使用命令 一、iptables防火墙 1、基本操作 查看防火墙状态 service iptables status 停止防火墙 service ipta…

    Linux 2023年6月14日
    093
  • 08_Linux基础-vim-tmux-字符编码

    08_Linux基础-vim-tmux-字符编码 一. vim 文本编辑器-vim(编辑文本) Windows:记事本、word、sublime、pycharm能编辑音乐、视频、图…

    Linux 2023年6月6日
    0102
  • dotnet诊断工具记录

    CPU爆高(cpu陡增,比如正常运行一般是x%的cpu,突然到了20% 30%甚至更高) 调试高 CPU 使用率 dotnet tool install –global dotn…

    Linux 2023年6月7日
    0101
  • 搭建docker镜像仓库(一):使用registry搭建本地镜像仓库

    服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64…

    Linux 2023年6月7日
    085
  • Windows server 2012 安装exchange 2013

    一、实验环境 操作系统:Windows server 2012 R2 邮件系统版本:exchange 2013 安装的服务:AD CS、AD DS、IIS、DNS 二、安装exch…

    Linux 2023年6月7日
    0108
  • archLinux 配置用户

    archlinux 启动之后只有默认的root用户,首先介绍下系统启动到登录需要的步骤 1.系统通过systemd 以pid为1初始化系统,启动系统用户和系统必要的服务,(这一步目…

    Linux 2023年6月13日
    079
  • 七种方案!探讨Redis分布式锁的正确使用姿势

    日常开发中,秒杀下单、抢红包等等业务场景,都需要用到分布式锁。而Redis非常适合作为分布式锁使用。本文将分七个方案展开,跟大家探讨Redis分布式锁的正确使用方式。如果有不正确的…

    Linux 2023年5月28日
    087
  • 微服务架构项目浅析

    微服务架构的演变 最初的需求 业务发展后需要克服的问题 微服务架构使用的组件 Nginx Redis Rabbitmq Mysql jar jdk * 总结 ​ 这个章节主要介绍微…

    Linux 2023年6月14日
    0114
  • list底层实现

    list和vector都是容器,只不过他们的存储结构不同,vector实际底层结构是顺序表,支持随机访问。list的底层结构带头双向链表,不支持随机访问。 但list的底层实现不同…

    Linux 2023年6月13日
    0104
  • 站长工具

    背景 日常测试全国各种某网站的响应情况使用 站长工具 站长工具 http://tools.wujingquan.com/ 站长工具 ping检测 ping检测 https://pi…

    Linux 2023年6月6日
    0107
  • 我对二进制的理解

    理解进制的重要方法是类比我们熟知的十进制 10进制 一个正常的人类,拥有10根手指,每根手指代表1个信息,那么两双手掌便可表达10个信息。1, 2, 3, …, 10。…

    Linux 2023年6月7日
    054
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球