supervisor安装CeSi集中化管理Supervisor

一、安装supervisor

备注:supervisor 只能管理前台进程的服务,比如 npm run  这些 ,一些后台运行的服务无法管理【后台运行的服务可以用systemd 进行管理】

1、安装epel源

yum install epel-release
yum install -y supervisor

2、创建supervisor工作目录

mkdir /etc/supervisor
mkdir /etc/supervisor/conf.d

ps: 删除默认的工作目录:

rm -rf /etc/supervisord.d
rm -rf /etc/supervisord.conf

3、生成配置文件

echo_supervisord_conf > /etc/supervisor/supervisord.conf

4、修改supervisord.conf配置文件

................
[inet_http_server]        	; inet (TCP) server disabled by default
port=0.0.0.0:9001        	; ip_address:port specifier, *:port for all iface
username=admin       		; default is no username (open server)
password=XXXXXXXX           ; default is no password (open server)...............
[include]
files = conf.d/*.conf

5、创建一个需要运行的实例

配置详解:

...................
[program:theprogramname]    						 #这里的theprogramname就是我们显示在web前端以及终端的监控名称
command=/bin/cat             						 #运行启动命令
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1                    ; number of processes copies to start (def 1)
directory=/tmp               						 #定义工作目录,command 执行目录
umask=022                     ; umask for process (default None)
priority=999                  						 #进程启动优先级,默认999,值小的优先启动
autostart=true               						 #在supervisord启动的时候也自动启动
startsecs=1                   						 #启动1秒后没有异常退出,就表示进程正常启动了,默认为1秒
startretries=3               						 #启动失败自动重试次数,默认是3
autorestart=false       						     #程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启;建议设置为false,当手动kill 下线服务,supervisor不会自动拉起exitcodes=0,2                 ; 'expected' exit codes used with autorestart (default 0,2)
stopsignal=QUIT               ; signal used to kill process (default TERM)
stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
stopasgroup=false     								#默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     								#默认为false,向进程组发送kill信号,包括子进程
user=root                   						#用哪个用户启动进程,默认是rootredirect_stderr=false          #把stderr重定向到stdout,默认falsestdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO
stdout_logfile_maxbytes=20MB   						#stdout 日志文件大小,默认50MB
stdout_logfile_backups=10     						#sdout 日志文件备份数,默认是10
stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
stdout_events_enabled=false   ; emit events on stdout writes (default false)stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
stderr_logfile_backups=10     ; # of stderr logfile backups (0 means none, default 10)
stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
stderr_events_enabled=false   ; emit events on stderr writes (default false)environment=A="1",B="2"       ; process environment additions (def no adds)
serverurl=AUTO                ; override serverurl computation (childutils)
...................

vim /etc/supervisor/conf.d/test.conf

[program:test]
command=python /tmp/test.py
directory=/tmp
autostart=true
startsecs=1
startretries=3
redirect_stderr=true
autorestart=false

6、配置supervisor自启动

#修改默认的启动配置文件

vim /usr/lib/systemd/system/supervisord.service

[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service nss-user-lookup.target[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf[Install]
WantedBy=multi-user.target

#重新加载

[root@localhost etc]# systemctl daemon-reload

#设置开始自启动

[root@localhost etc]# systemctl enable supervisord

#启动supervisord

[root@localhost etc]# systemctl start supervisord

7、登录supervisor 控制台

输入用户名/密码

可以看到运行的 实例

二、安装CeSi

 CeSi(Centralized Supervisor Interface) 是 Supervisor 官方推荐的集中化管理 Supervisor 实例的 Web UI,该工具是用 Python 编写,基于 Flask Web 框架 。Supervisor 进程,功能比较简单,通过 CeSi 可以集中管理各个服务器节点的进程,在 Web 界面就可以轻松管理各个服务的启动、关闭、重启等,很方便使用。

项目地址:https://github.com/gamegos/cesi

本文环境: centos7 

1、安装依赖

$ sudo yum install -y git epel-release
$ sudo yum install -y python34 python34-pip python34-venv

2、安装 Cesi

# 设置环境变量并创建安装目录
$ export CESI_SETUP_PATH=~/cesi
$ mkdir ${CESI_SETUP_PATH}
$ cd ${CESI_SETUP_PATH}#下载cesi软件包,并解压;这里是2.7.1版本
$ wget https://github.com/gamegos/cesi/releases/download/v2.7.1/cesi-extended.tar.gz -O cesi.tar.gz
$ tar -xvf cesi.tar.gz# 创建venv虚拟环境
$ python3 -m venv venv# 激活venv虚拟环境
$ source venv/bin/activate#在venv虚拟环境中,使用pip3管道安装依赖
(venv) $ pip3 install -r requirements.txt#后面有个坑,无法登录【AttributeError: can't set attribute】 需要安装这个 upgrade flask-sqlalchemy lib.
(venv) $ pip3  install -U Flask-SQLAlchemy# 失效venv虚拟环境
(venv) [root@localhost cesi]# deactivate
[root@localhost cesi]# 

3、配置 Cesi 

修改我们上面定义的  ${CESI_SETUP_PATH}/defaults/cesi.conf.toml 配置文件

${CESI_SETUP_PATH} 相当于 /root/cesi/

cesi启动会调用此配置文件

[root@localhost cesi]# vim /root/cesi/defaults/cesi.conf.toml
............
[cesi]
# Database Uri
database = "sqlite:///users.db"                         # Relative path
# Etc
#database = "sqlite:opt/cesi/< version >/users.db"  # Absolute path
#database = "postgres://<user>:<password>@localhost:5432/<database_name>"
#database = "mysql+pymysql://<user>:<password>@localhost:3306/<database_name>"
activity_log = "activity.log"   # File path for CeSI logs
admin_username = "admin"        # Username of admin user
admin_password = "admin"        # Password of admin user# This is the definition section for new supervisord node.
# [[nodes]]
# name = "api"          # (String) Unique name for supervisord node.
# environment = ""      # (String) The environment name provides logical grouping of supervisord nodes. It can be used as filtering option in the UI.
# username = ""         # (String) Username of the XML-RPC interface of supervisord Set nothing if no username is configured
# password = ""         # (String) Password of the XML-RPC interface of supervisord. Set nothing if no username is configured
# host = "127.0.0.1"    # (String) Host of the XML-RPC interface of supervisord
# port = "9001"         # (String) Port of the XML-RPC interface of supervisord# Default supervisord nodes#添加一个node的supervisord
[[nodes]]
name = "172.16.20.252"
environment = "test"
username = "admin"
password = "XXXXXXXX"
host = "172.16.10.252"
port = "9001"

 

4、启动 Cesi 

#以虚拟环境直接运行项目
[root@localhost cesi]# /root/cesi/venv/bin/python3 /root/cesi/cesi/run.py  --config-file  /root/cesi/defaults/cesi.conf.toml

出现http://X.X.X.X:5000 表示运行成功

5、登录 Cesi 控制台

在浏览器中输入 http://172.16.10.252:5000 打开管理界面如下:

默认用户名/密码:   admin/admin

6、使用supervisord 管理CeSi 自启动

vim  /etc/supervisor/conf.d/cesi.conf

[program:cesi]
command=/root/cesi/venv/bin/python3 /root/cesi/cesi/run.py  --config-file  /root/cesi/defaults/cesi.conf.toml
autostart=true
startsecs=1
starttries=3
redirect_stderr=false
autorestart=false

重新加载新的配置

supervisorctl update

7、supervisorctl  命令行工具使用

更新新的配置到supervisord
supervisorctl update重新启动配置中的所有程序
supervisorctl reload启动某个进程(program_name=你配置中写的程序名称)supervisorctl start program_name停止某一进程 (program_name=你配置中写的程序名称)
supervisorctl stop program_name重启某一进程 (program_name=你配置中写的程序名称)
supervisorctl restart program_name停止全部进程
supervisorctl stop all

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

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

相关文章

比较stl库的ostringstream与Qt的QString::arg(),QString::number()

需求&#xff1a; 显示一个float或者double类型的数&#xff0c;要求小数点后的数字位数为定值。 考虑STL库的ostringstream或者Qt的QString::arg(), number 对于stringstream,使用比较繁琐&#xff0c;要联合使用std::fixed和std::setprecision才能实现固定小数位数显示&am…

[论文笔记]QLoRA: Efficient Finetuning of Quantized LLMs

引言 今天带来LoRA的量化版论文笔记——QLoRA: Efficient Finetuning of Quantized LLMs 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c;比如替换"作者"为"我们"。 我们提出了QLoRA&#xff0c;一种高效的微调方法&#xff0c;它在减少内存使用…

C语言深入理解指针五(18)

文章目录 前言一、回调函数是什么&#xff1f;二、qsort使用举例使用qsort函数排序整型数据使用qsort函数排序结构数据 三、qsort的模拟实现总结 前言 本篇将会很有意思&#xff01; 一、回调函数是什么&#xff1f; 回调函数就是一个通过函数指针调用的函数。   如果你把函数…

C++——STL——栈(stack)

栈的定义 栈 &#xff08; stack &#xff09;是限定仅在表的一端进行插入和删除操作的线性表&#xff0c;允许插入和删除的一端称 为栈顶&#xff0c;另一端称为栈底&#xff0c;不含任何数据元素的栈称为空栈。 栈的示意图 因为栈只能够在一端进行插入和删除&#xff0c;所以…

大数据之Flink(三)

9.3、转换算子 9.3.1、基本转换算子 9.3.1.1、映射map 一一映射 package transform;import bean.WaterSensor; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; impor…

鸿蒙交互事件开发04——手势事件

1 概 述 手势事件是移动应用开发中最常见的事件之一&#xff0c;鸿蒙提供了一些方法来绑定手势事件。通过给各个组件绑定不同的手势事件&#xff0c;并设计事件的响应方式&#xff0c;当手势识别成功时&#xff0c;ArkUI框架将通过事件回调通知组件手势识别的结果。 …

王道考研操作系统笔记(一)

虚拟内存的定义和特征&#xff1a; 基于局部性的原理&#xff0c; 在程序装入时&#xff0c;可以将程序中很快用到的部分装入内存&#xff0c;暂时用不到的数据装入外存&#xff0c;就可以让程序开始执行&#xff0c;在程序执行过程中&#xff0c;当所访问的信息不在内存的时…

frida主动调用init_array中的函数

ida打开目标so&#xff0c;查看要主动调用的函数 前提是先过掉检测frida等等&#xff0c;然后控制台启动 输出so地址 Process.findModuleByName("libmod.so") New函数 var aa new NativeFunction(ptr(0x785e002000).add(0x134EC0),"void",[]) 主动调用 a…

如何让人工智能训练更快

影响人工智能训练时间的因素 在深度学习训练中&#xff0c;训练时间的计算涉及到多个因素&#xff0c;包括 epoch 数、全局 batch size、微 batch size、计算设备数量等。下面是一个基本的公式来说明这些参数之间的关系&#xff08;注意&#xff0c;这只是一个基本的说明公式&…

Makefile文件理解

https://zhuanlan.zhihu.com/p/629855009 参考链接 这个链接我没都看&#xff0c;等用的时候再看吧 我遇到的文件是下面这张图片&#xff0c;然后23行两条命令和在命令行中执行是一样的。

E32.【C语言 】练习:蓝桥杯题 懒羊羊字符串

1.题目 【问题描述】 “懒羊羊”字符串是一种特定类型的字符串&#xff0c;它由三个字符组成&#xff0c;具有以下特点: 1.字符串长度为 3. 2.包含两种不同的字母。 3.第二个字符和第三个字符相同 换句话说&#xff0c;“懒羊羊”字符串的形式应为 ABB&#xff0c;其中A和B是不…

k8s 资源管理

文章目录 ResourceQuota什么是资源配额定义一个ResourceQuotaResourceQuota的使用 LimitRangeLimitRange的用途示例1&#xff1a;配置默认的requests和limits 节点故障大部分都是由于资源分配不合理、超额分配引起的&#xff0c;因此需要用某个技术手段保证节点的资源不会过大地…

【HCIA-Datacom】网络参考模型

网络参考模型 1. 应用和数据2. 网络参考模型与标准协议OSI参考模型TCP/IP参考模型与标准协议常见的几种协议应用层传输层网络层和数据链路层物理层 3. 数据通信过程思考题测一测 ⭐在上一章节中已经给大家介绍了我们网络与生活之间的一些联系 ⭐这一章节主要学习的内容叫做网络…

GDB 查看汇编

查看汇编 x disassemble

C++从入门到起飞之——string类用法 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1. 为什么学习string类&#xff1f; 1.1 C语言中的字符串 1.2 两个面试题(先不做讲解) 2. 标准库中…

Vulnhub-RickdiculouslyEasy靶机攻略

御剑扫描到ip 一.第一个flag 主机扫描 目录扫描 二.网页信息收集-第二个flag 9090也开放了web服务所以我们在IP地址后面加端口试试&#xff0c;如下图&#xff0c;加上了端口&#xff0c;并且发现了第二个flag&#xff0c;也对第二个flag进行了简单的探索也没有发现什么可以…

内存卡提示格式化怎么办?轻松应对格式化

在日常使用电子设备时&#xff0c;我们有时会遇到内存卡提示需要格式化的情况。这种情况往往让人感到焦虑和困惑&#xff0c;因为格式化意味着内存卡上的所有数据都将被清除。然而&#xff0c;在遇到这种情况时&#xff0c;我们不必过于惊慌。本文将介绍四种方法&#xff0c;帮…

如何获取MySQL数据表的列信息

在数据库管理中&#xff0c;了解表的结构是至关重要的。在MySQL中&#xff0c;我们可以通过几种方式来获取数据表的列信息。这不仅可以帮助我们更好地理解表的结构&#xff0c;还可以在编写查询时提供便利。以下是三种常用的方法来获取MySQL数据表的列信息。 使用 SHOW COLUMN…

UDP通信实现

目录 前言 一、基础知识 1、跨主机传输 1、字节序 2、主机字节序和网络字节序 3、IP转换 2、套接字 3、什么是UDP通信 二、如何实现UDP通信 1、socket():创建套接字 2、bind():绑定套接字 3、sendto():发送指定套接字文件数据 4、recvfrom():接收指定地址信息的数据 三…

如何逆转Instagram账号流量减少?4个实用技巧分享

Instagram作为全球十大社媒之一&#xff0c;不仅是个人分享生活的平台&#xff0c;还是跨境卖家进行宣传推广和客户开发的关键工具。在运营Instagram的过程中&#xff0c;稍有不慎就容易出现账号被限流的情况&#xff0c;对于账号状态和运营工作的进行都十分不利。 一、如何判断…