supervisor-男程序员的福音

news2024/9/24 13:23:12

supervisor是什么

supervisor是用python语言编写的,只能用于类Unix系统上的进程管理工具。

supervisor有什么用

举一个常见的场景,比如你的项目已经到了测试联调阶段,QA需要你把程序启动起来,然后进行测试,那么启动二进制文件最常用的运行命令是./二进制 &,这样可以使得程序在后台运行,即时关闭当前终端,也不会使程序终止。运行成功后,你开开心心的找女朋友约会去了,QA一顿猛如虎的操作,把程序搞挂了,打电话给你,需要你重启一下程序。此时你左手拿着电话,右手牵着女朋友的手,在心里问候了QA的家人
在这里插入图片描述
为了不让女朋友生气,supervisor来了,它能够简单且高效地启动、重启、终止程序的运行,并且它能够检测程序是否正常运行,并且在程序挂掉后自动重启,并且还能把日志(err log,warning log)输出到指定位置,能够捕捉到QA遗漏的问题。

supervisor的组成

supervisor是由两个组件组成的,supervisordsupervisorctl

supervisord

当我们启动supervisor时,会启动一个父进程supervisord,所有由它管理的进程都成为它的子进程,supervisord统一管理这些子进程的启动、重启和终止。

supervisorctl

这是一个命令行管理工具,输入某些命令,如:start、stop、restart、status等,就可以对指定的子进程进行相应的操作了。

小结

可以这样简单理解起来,supervisord和supervisorctl理解成server和client。通过supervisorctl这个client接收命令,supervisord这个server对命令进行处理和响应。

安装supervisor

macOS:brew install supervisor
linux:pip install supervisor

安装完成后,得到的了如下3个二进制的命令:

echo_supervisor_conf: 将supervisor相关的所有配置打印出来。

supervisord:启动supervisor命令。

supervisorctl:管理我们托管在supervisor中的进程。

启动supervisor

systemctl start supervisord;
systemctl enable supervisord;

配置文件

[unix_http_server]
file=/run/supervisor.sock   ; (the path to the socket file)

[supervisord]
logfile=/var/log/supervisor/supervisord.log  ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10          ; (num of main logfile rotation backups;default 10)
loglevel=info               ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false              ; (start in foreground if true;default false)
minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///run/supervisor.sock ; use a unix:// URL  for a unix socket

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

上面的配置文件,只截取了比较关键的几部分。需要注意三点:

  1. linux中的程序启动之后,会有个对应的socket文件。supervisord启动之后这个socket文件位置通过[unix_http_server]中的file指定。而且supervisorctl命令需要和supervisord在本地基于socket文件交互,所以[supervisorctl]中serverurl要和[unix_http_server]中的file保持同步。
  2. 上面这个配置文件[include]部分,它会加载supervisord.d/目录下所有的*.ini文件
  3. 在/etc目录下创建supervisor.d文件夹,用于存放.ini文件

.ini文件的作用就是:你想将程序A托付给supervisor管理,那就按要求的格式,为程序A创建一个A.ini配置文件,在这个文件中定义好,程序A的二进制文件在哪里、执行啥命令启动程序A、日志文件在哪等等。

下面是一个自定义.ini文件的示例

[program:supervisor1]
;supervisor1是自定义的项目名称,之后通过supervisorclt命令管理supervisor1
;command 启动程序的相对路径
command=/home/worker/workerspace/supervisor1.sh 
numprocs=1                                  
;directory 在执行command之前,需要切换到哪个目录中
directory=/home/worker/workerspace/  
;supervisord启动时,是否同时启动
autostart=true        
;autorestart意外退出后,是否重新启动
autorestart=true      
startsecs=30          
startretries=3        
exitcodes=0,2        
stopsignal=QUIT      
stopwaitsecs=10       
;user 使用哪个用户启动本程序
user=worker             
;redirect_stderr将标准错误,重定向到标准输出
redirect_stderr=true  
;stdout_logfile 标准输出的日志文件的位置
stdout_logfile=/home/worker/workerspace/supervisor1.stdout.log 
stdout_logfile_maxbytes=64MB
stdout_logfile_backups=5                             
stdout_capture_maxbytes=1MB  
stdout_events_enabled=false   

supervisor的命令行

;有新的ini文件被添加进来时需要更新
supervisorctl update
;查看托管的全部进程或单个进程
supervisorctl status  [supervisor1]
supervisor1 RUNNING
;终止某个进程
supervisorctl stop supervisor1
supervisor1: stopped
;启动某个进程
supervisorctl start supervisor1
supervisor1: started
;重启某个进程
supervisorctl restart supervisor1
; 重新启动配置文件中所有进程
supervisorctl reload
Restarted supervisord

配置完成这些,你就可以放心的跟女朋友约会了,程序挂掉之后,supervisor会帮你重新启动。

欢迎关注 晴天码字,晴天会持续输出使用且有趣的文章

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/356661.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Java实现多线程打印奇偶数

用Java实现多线程打印奇偶数1. wait()和 notify() 方法的作用:2. Java实现(1)Thread1.class 奇数线程(2)Thread2.class 偶数线程(3)共享资源类(4)测试1. wait()和 notify…

一篇文章带你玩转 Kubernetes:组件、核心概念和Nginx实战演示

目录一、简介1.1 容器部署时代1.2 Kubernetes有哪些优点二、Kubernetes 组件介绍三、Kubernetes 核心概念3.1 Namespace3.2 Pod3.3 Deployment3.4 Service3.5 Ingress四、Kubernetes 核心概念实战4.1 部署yaml文件4.2 通过Pod IP访问Nginx4.3 通过Service IP访问Nginx4.4 修改i…

[数据结构]:顺序表(C语言实现)

目录 前言 顺序表实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-SeqListCommon.cpp 04-SeqListPositionOperation.cpp 05-SeqListValueOperation.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为…

node+vue微信小程序的社区后勤报修系统

社区后勤报修系统小程序进行总体设计和详细设计。总体设计主要包括小程序功能设计、小程序总体结构设计、小程序数据结构设计和小程序安全设计等:详细设计主要包括社区后勤报修系统小程序数据库访问的实现,主要功能模块的具体实现,模块实现关键代码等。最后对社区后…

目标检测论文阅读:DETR算法笔记

标题:End-to-End Object Detection with Transformers 会议:ECCV2020 论文地址:https://link.springer.com/10.1007/978-3-030-58452-8_13 官方代码:https://github.com/facebookresearch/detr 作者单位:巴黎第九大学、…

【Linux】进程替换

文章目录进程程序替换替换原理替换函数函数返回值函数命名理解在makefile文件中一次生成两个可执行文件总结:程序替换时运行其它语言程序进程程序替换 程序要运行要先加载到内存当中 , 如何做到? 加载器加载进来,然后程序替换 为什么? ->冯诺依曼 因为CPU读取数据的时候只…

【原创】java+swing+sqlserver药品管理系统设计与实现

之前数据库都是用的mysql,今天我们使用sqlserver在配合swing来开发一个药品管理系统。方便医院工作人员进行药品的管理,基础功能基本都是一些增删改查操作。 功能分析: 药品管理系统主要提供给管理员和员工使用,功能如下&#x…

[python]win10安装gym

anconda3里面安装: pip install gym[atari,accept-rom-license]0.26.1 AutoRom 测试结果: import gym envgym.make(Assault-v4,render_modehuman) env.reset() for _ in range(100000): actionenv.action_space.sample() env.step(action) env.c…

数据结构——算法的时间复杂度

🌇个人主页:_麦麦_ 📚今日名言:生命中曾经有过的所有灿烂,都终究需要用寂寞来偿还。——《百年孤独》 目录 一、前言 二、正文 1.算法效率 1.1如何衡量一个算法的好坏 1.2算法的复杂度 2. 时间复杂度 2.1时间复杂度的…

元胞自动机

文章目录前言文献阅读摘要主要贡献方法框架实验结论元胞自动机元胞自动机是什么?构成及规则案例及代码实现总结前言 This week,the paper proposes a Multi-directional Temporal Convolutional Artificial Neural Network (MTCAN) model to impute and forecast P…

部署dapr的辛酸历程

前言dapr大概的了解,个人理解他就是一个分布式服务的管理,把微服务常用的组件(缓存,消息中间件、分布式锁、安全id4等)和监控以及服务注册、发现等等一系列功能以一个很抽象的方式管理起来。可能我们部署微服务用consul、ocelot、polly套件、…

DDD单根 聚合根 实体 值对象

前言2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD。快二十年的时间,领域驱动设计在不断地发展,后微服务时代强调的东西,在国…

Nginx网站服务及优化

Nginx网站服务及优化一、简介1、Nginx概述2、Nginx和Apache的优缺点比较3、Nginx和Apache最核心的区别二、Linux中的I/O三、Nginx编译安装详细1、关闭防火墙、安装依赖关系2、新建用户nginx便于管理3、将压缩包传入到/opt目录下,编译安装4、做软连接并启动nginx5、创…

软件测试简历个人技能和项目经验怎么写?(附项目资料)

目录 前言 个人技能 项目实战经验 项目名称:苏州银行项目(webapp) 项目描述: 项目名称:中国平安项目(webapp) 项目描述: 项目名称:苏宁易购项目(webapp&a…

软件体系结构(期末复习)

文章目录软件体系结构软件体系结构概论软件体系结构建模软件体系结构风格统一建模语言基于体系结构的软件开发软件体系结构 软件体系结构概论 软件危机是指计算机软件的开发和维护过程中遇到的一系列严重问题。 软件危机的表现: 软件危机的原因: 软件工程的基本要素&#xf…

轻松上手nacos使用

三步上手nacos使用1.为什么使用nacos?2.如何使用nacos1.为什么使用nacos? 1.服务发现中心。 微服务将自身注册至 Nacos,网关从 Nacos 获取微服务列表。 2.配置中心。 微服务众多,它们的配置信息也非常复杂,为了提高系统的可维护性&#xf…

每天一个linux命令---awk

awk命令 1. 简介 awk是一种处理文本文件的语言,是一个强大的文本分析工具,grep、sed、awk并称为shell中文本处理的三剑客。 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho&am…

1.OCR--文本检测算法FCENet

文章目录1.简介2.主要工作2.1 傅里叶轮廓嵌入(Fourier Contour Embedding)2.2 FCE模型3.代码实现参考资料欢迎访问个人网络日志🌹🌹知行空间🌹🌹 论文:Fourier Contour Embedding for Arbitrary-Shaped Text Detection 1.简介 这…

设计模式之中介模式与解释器模式详解和应用

目录1 中介模式详解1.1 中介模式的定义1.1.1 中介者模式在生活场景中应用1.1.2 中介者模式的使用场景1.2 中介模式的通用实现1.2.1 类图设计1.2.2 代码实现1.3 中介模式应用案例之聊天室1.3.1 类图设计1.3.2 代码实现1.4 中介者模式在源码中应用1.4.1 jdk中Timer类1.5 中介者模…

logd守护进程

logd守护进程1、adb logcat命令2、logd守护进程启动2.1 logd文件目录2.2 main方法启动3、LogBuffer缓存大小3.1 缓存大小优先级设置3.2 缓存大小相关代码位置android12-release1、adb logcat命令 命令功能adb bugreport > bugreport.txtbugreport 日志adb shell dmesg >…