首页 > 系统相关 >Linux 系统进程守护工具 cesi + superviosr

Linux 系统进程守护工具 cesi + superviosr

时间:2023-05-06 15:05:17浏览次数:59  
标签:supervisord 启动 cesi stdout 默认 Linux logfile superviosr


一、安装 Supervisor

pip install supervisor

使用 echo_supervisord_conf 命令生成默认配置文件

echo_supervisord_conf > /etc/supervisord.conf

配置文件说明

位置:etc/supervisord.conf

内容:

# 指定了socket file的位置
[unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 文件,supervisorctl 会使用
;chmod=0700                 ;socket文件的mode,默认是0700
;chown=nobody:nogroup       ;socket文件的owner,格式:uid:gid
 
 #用于启动一个含有前端的服务,可以从Web页面中管理服务。其中,port用于设置访问地址,username和password用于设置授权认证。
[inet_http_server]         ;HTTP服务器,提供web管理界面
port=192.168.2.111:9001        ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
username=user              ;登录管理后台的用户名
password=123               ;登录管理后台的密码
 
 # 管理服务本身的配置
[supervisord]
logfile=/tmp/supervisord.log ;日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB        ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10           ;日志文件保留备份数量默认10,设为0表示不备份
loglevel=info                ;日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false               ;是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024                  ;可以打开的文件描述符的最小值,默认 1024
minprocs=200                 ;可以打开的进程数的最小值,默认 200
 
 
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式连接supervisord
 
; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ; 程序启动命令
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3       ; 启动失败自动重试次数,默认是3
user=tomcat          ; 用哪个用户启动进程,默认是root
priority=999         ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB  ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20   ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程
 # 对事件进行的管理
;[eventlistener:theeventlistenername]

# 对任务组的管理 ,包含其它配置文件
;[group:thegroupname]
;programs=progname1,progname2  ; each refers to 'x' in [program:x] definitions
;priority=999                  ; the relative start priority (default 999)

[include]
files = /etc/supervisord.d/*.ini    ;可以指定一个或多个以.ini结束的配置文件

注意最后行,代表我们将其他配置的supervisor文件放在/etc/supervisord.d 目录下,名称为 *.ini

[include]
files = /etc/supervisord.d/*.ini    ;可以指定一个或多个以.ini结束的配置文件

inet_http_server 也要放开,下面cesi服务需要调用该接口

[inet_http_server]         ;HTTP服务器,提供web管理界面
port=127.0.0.1:9001        ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
username=user              ;登录管理后台的用户名
password=123               ;登录管理后台的密码

 

手动创建目录

mkdir /etc/supervisord.d

自定义配置文件

[root@test111 supervisord.d]# cat ho-monitor.ini 
[program:cesi-5000] 
; program 表示 Supervisor 管理的服务实例,cesi-5000 是自己命名的服务名称,名字可以随便其,我为了方便管理统一命名为:服务名称-端口
directory = /home/jast/monitor-1.0-SNAPSHOT
; 程序的启动目录
command = java -cp /home/jast/ho-monitor-1.0-SNAPSHOT/lib/*:/home/jast/ho-monitor-1.0-SNAPSHOT/ho-monitor-1.0-SNAPSHOT.jar  com.monitor.test111
; 启动服务的命令
priority=1                    
; 数字越高,优先级越高
autostart = true     
; 在 supervisord 启动的时候也自动启动
startsecs = 5        
; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true   
; 程序异常退出后自动重启
startretries = 3     
; 启动失败自动重试次数,默认是 3
user = root      
; 用哪个用户启动
redirect_stderr = true  
; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 50MB  
; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 7 
; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /var/log/monitor/stdout.log

如果要将一个程序启动多个进程则需加入配置

;启动进程数量
numprocs = 5
;当进程数量numprocs大于1是需要定义process_name
process_name=%(program_name)s_%(process_num)002d

 启动五个进程Demo

[root@test111 supervisord.d]# cat ho-monitor.ini 
[program:cesi-5000] 
; program 表示 Supervisor 管理的服务实例,cesi-5000 是自己命名的服务名称,名字可以随便其,我为了方便管理统一命名为:服务名称-端口
directory = /home/jast/monitor-1.0-SNAPSHOT
; 程序的启动目录
command = java -cp /home/jast/ho-monitor-1.0-SNAPSHOT/lib/*:/home/jast/ho-monitor-1.0-SNAPSHOT/ho-monitor-1.0-SNAPSHOT.jar  com.monitor.test111
;启动进程数量
numprocs = 5
;当进程数量numprocs大于1是需要定义process_name
process_name=%(program_name)s_%(process_num)002d
; 启动服务的命令
autostart = true     
; 在 supervisord 启动的时候也自动启动
startsecs = 5        
; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true   
; 程序异常退出后自动重启
startretries = 3     
; 启动失败自动重试次数,默认是 3
user = root      
; 用哪个用户启动
redirect_stderr = true  
; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 50MB  
; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 7 
; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /var/log/monitor/stdout.log

配置参数具体说明:

- command:启动程序使用的命令,可以是绝对路径或者相对路径 - process_name:一个python字符串表达式,用来表示supervisor进程启动的这个的名称,默认值是%(program_name)s - numprocs:Supervisor启动这个程序的多个实例,如果numprocs>1,则process_name的表达式必须包含%(process_num)s,默认是1 - numprocs_start:一个int偏移值,当启动实例的时候用来计算numprocs的值 - priority:权重,可以控制程序启动和关闭时的顺序,权重越低:越早启动,越晚关闭。默认值是999 - autostart:如果设置为true,当supervisord启动的时候,进程会自动重启。 - autorestart:值可以是false、true、unexpected。false:进程不会自动重启,unexpected:当程序退出时的退出码不是exitcodes中定义的时,进程会重启,true:进程会无条件重启当退出的时候。 - startsecs:程序启动后等待多长时间后才认为程序启动成功 - startretries:supervisord尝试启动一个程序时尝试的次数。默认是3 - exitcodes:一个预期的退出返回码,默认是0,2。 - stopsignal:当收到stop请求的时候,发送信号给程序,默认是TERM信号,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2。 - stopwaitsecs:在操作系统给supervisord发送SIGCHILD信号时等待的时间 - stopasgroup:如果设置为true,则会使supervisor发送停止信号到整个进程组 - killasgroup:如果设置为true,则在给程序发送SIGKILL信号的时候,会发送到整个进程组,它的子进程也会受到影响。 - user:如果supervisord以root运行,则会使用这个设置用户启动子程序 - redirect_stderr:如果设置为true,进程则会把标准错误输出到supervisord后台的标准输出文件描述符。 - stdout_logfile:把进程的标准输出写入文件中,如果stdout_logfile没有设置或者设置为AUTO,则supervisor会自动选择一个文件位置。 - stdout_logfile_maxbytes:标准输出log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小 - stdout_logfile_backups:标准输出日志轮转备份的数量,默认是10,如果设置为0,则不备份 - stdout_capture_maxbytes:当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB - stdout_events_enabled:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发 - stderr_logfile:把进程的错误日志输出一个文件中,除非redirect_stderr参数被设置为true - stderr_logfile_maxbytes:错误log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小 - stderr_logfile_backups:错误日志轮转备份的数量,默认是10,如果设置为0,则不备份 - stderr_capture_maxbytes:当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB - stderr_events_enabled:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发 - environment:一个k/v对的list列表 - directory:supervisord在生成子进程的时候会切换到该目录 - umask:设置进程的umask - serverurl:是否允许子进程和内部的HTTP服务通讯,如果设置为AUTO,supervisor会自动的构造一个url

 

启动服务

supervisord -c /etc/supervisord.conf

 访问安装的 http://ip:9001 ,成功

Linux 系统进程守护工具 cesi + superviosr_日志文件

安装Cesi

安装依赖

# 安装依赖 (如果有跳过)
yum install -y git wget epel-release python34 python34-pip npm bzip2
sudo pip install flask

#如果提示python34无法安装则进行源执行下面命令
yum -y install epel-release


# 设置环境变量并创建安装目录
export CESI_SETUP_PATH=/usr/local/cesi
mkdir ${CESI_SETUP_PATH}
cd ${CESI_SETUP_PATH}

# 下载cesi-2.6.7.tar.gz并解压
wget https://github.com/gamegos/cesi/releases/download/v2.6.7/cesi-extended.tar.gz -O cesi.tar.gz
tar -zxvf cesi.tar.gz

# 创建venv虚拟环境(也可以使用已有的虚拟环境)
python3.4 -m venv venv

# 激活venv虚拟环境
source venv/bin/activate
# 在venv虚拟环境中,使用pip3管道安装依赖
pip3 install -r requirements.txt
# 失效venv虚拟环境
deactivate

############### 此段为可选安装,经本人测试,不建议安装,要安装一大堆东西,然并卵 ############
# (可选安装)升级node到最新版
npm install -g n
n latest
# (可选安装)安装 yarn
curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
yum install -y yarn
# (可选安装)构建ui,需要安装yarn, node, npm
cd ${CESI_SETUP_PATH}/cesi/ui
yarn install
yarn build
#######################################################################################

# 复制配置文件到/etc目录
cp ${CESI_SETUP_PATH}/defaults/cesi.conf.toml /etc/cesi.conf

# 复制服务配置文件到/etc/systemd/system目录,并注册为服务(CentOS7)
cp ${CESI_SETUP_PATH}/defaults/cesi.service /etc/systemd/system/cesi.service

修改cesi.conf文件

> vim /etc/cesi.conf
# This is the main CeSI toml configuration file. It contains CeSI web application and
# supervisord information to connect

# This is the CeSI's own configuration.
[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 这里是cesi的登陆账号密码
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 ,这里连接的是我们的supervisor 的ip、端口、账号、密码
[[nodes]]
name = "192.168.2.111"
environment = ""
username = "user"
password = "123"
host = "192.168.2.111"
port = "9001"

手动启动cesi服务

/usr/local/cesi/venv/bin/python3 /usr/local/cesi/cesi/run.py --config-file /etc/cesi.conf

# 指定端口号启动
/usr/local/cesi/venv/bin/python3 /usr/local/cesi/cesi/run.py --config-file /etc/cesi.conf -p 5023

我们可以使用supervisor配置启动该服务

 

vim /etc/supervisord.d/cesi.ini
[program:cesi]
directory=/usr/local/cesi/cesi
command=/usr/local/cesi/venv/bin/python3 /usr/local/cesi/cesi/run.py --config-file /etc/cesi.conf
autostart=true
startsecs=10
starttries=3
user=root
priority=996
redirect_stderr=false
stdout_logfile=/usr/local/cesi/cesi.log
stderr_logfile=/usr/local/cesi/cesi-err.log
stopasgroup=false
killasgroup=true

 重新加载配置

supervisorctl reload

 重启cesi服务

supervisorctl restart cesi

 查看页面发现成功启动

Linux 系统进程守护工具 cesi + superviosr_日志文件_02

注意事项:

1.配置的日志存放目录要存在

Error: The directory named as part of the path /var/log/monitor/stdout.log does not exist in section 'program:cesi-5000' (file: '/etc/supervisord.d/monitor.ini')
For help, use /bin/supervisord -h

2.每次修改配置文件时候需要执行reload才能是配置生效

supervisorctl reload

 

标签:supervisord,启动,cesi,stdout,默认,Linux,logfile,superviosr
From: https://blog.51cto.com/u_13721902/6249920

相关文章

  • LINUX系统的快捷键是什么?
    1、终端及标签页快捷键快捷键功能Shift+Ctrl+T新建标签页Shift+Ctrl+W关闭标签页Ctrl+PageUp前一标签页Ctrl+PageDown后一标签页Shift+Ctrl+PageUp标签页左移Shift+Ctrl+PageDown标签页右移Alt+1切换到标签页1Alt+2切换到标签页2Alt+3切......
  • [Event] Linux con Japan 2015
    日本每年都举办一次LinuxCon,下面是今年的Event及对应的ppthttp://events.linuxfoundation.jp/events/linuxcon-japan粗粗看了一下,竟然还有这么一个主题。HowChinainvolvedinOpenSourceMovement不过幻灯片让人大跌眼镜,讲演怎么样姑且不论,这内容也太少了。http://eve......
  • 如何在Linux下写汇编
    http://docs.cs.up.ac.za/programming/asm/derick_tut/1.NASM编译器目前Linux下的汇编器主要有:as、as86和gas,但是本文使用的是NASM(TheNetwideAssembler)。它使用Intel形式的汇编格式,和Intel形式相对的是AT&T形式的汇编格式。2.Linux下汇编介绍2.1DOS和Linux下汇编的主要不同(1)DOS......
  • 查看Linux系统版本内核命令大全
    目录命令一:查看当前系统发行版本详细信息命令二:查看当前系统内核信息命令三:查看当前系统版本信息命令四:查看CPU相关信息命令五:查看系统位数Linux系统内核、发行版本有很多,那么如何查看当前Linux系统的内核信息、Linux系统发行版本等信息呢?Linux百科网分享查询Linux系统详细信息的方......
  • linux局域网通信软件都有哪些?要如何选择?
    出于安全性考虑和上级单位要求,不少原本使用Windows系统电脑的单位都在逐渐把单位内的电脑替代为linux系统电脑,但由于原先使用的局域网通信软件没有做linux适配,无法使用,只能替换为能在linux系统上使用的局域网通信软件。那么linux局域网通信软件如何选择?可以参考以下几点:功能不同的l......
  • linux中查看哪个端口是否被占用
    1.netstat-anp|grep端口号如下,我以3306为例,netstat-anp|grep3306(此处备注下,我是以普通用户操作,故加上了sudo,如果是以root用户操作,不用加sudo即可查看),如下图1: 图1中主要看监控状态为LISTEN表示已经被占用,最后一列显示被服务mysqld占用,查看具体端口号,只要有如图这一行就表......
  • linux 通过命令行(包括ssh)关闭屏幕
    题外话:不得不说现在百度的搜索真的烂,除了广告,有用的信息一点也搜不到,bing倒是广告少,照样也搜不到有用信息,谷歌虽然作恶不少,某些技术还是可以的,但是国内不通过特殊方法又使用不了,解决方法:1.找谷歌的镜像站,但是不好找,就算找到了,可能过几天就失效了;2.找一些小众的搜索......
  • Linux下搭建Python2.7环境
    Python(英语发音:/ˈpaɪθən/),是一种面向对象、解释型计算机程序设计语言,由1989年底发明。python具有简单、易学、免费、开源、可移植性、解释性、可嵌入性等特点,是一种不受局限、跨平台的开源编程语言,它功能强大且简单易学,因而得到了广泛应用和支持。1.Python下载Pyt......
  • Linux安装rabbitMQ常用命令
    1.拉取最新的rabbitMQdockerpullrabbitmq:management2.容器启动rabbitMQdockerrun-d--hostnamemy-rabbit--namerabbit-p15672:15672-p5672:5672rabbitmq:management其中:     --hostname:指定容器主机名称     --name:        指定容器名称  ......
  • Linux-基础题
    Linux-基础题Linux命令格式是什么样?Linux命令 可选的参数 你要操作的对象#显示根目录下的文件内容ls/#显示根目录下文件内容的详细信息,以及文件大小ls-l-h/#显示当前目录下的文件大小ls其实这个命令后面跟了一个文件夹ls.Linux命令必须添加参数才能执......