linux 下 supervisor 安装及使用

289 阅读3分钟

supervisor 安装及使用

使用supervisor管理进程,可以对进程进行监听、启动、停止。

安装&配置

直接下载安装

安装命令

  1. 安装 epel-releaseyum install epel-release
  2. 安装 supervisor yum install -y supervisor
  3. 验证是否成功supervisord --version

配置

安装成功后在/etc/下会有一个supervospord.conf 通过 vim supervospord.conf 进行修改配置

;只列出几个主要的配置
; Sample supervisor config file.

[unix_http_server]
file=/var/run/supervisor/supervisor.sock   ; (the path to the socket file)
;chmod=0700                 ; sockef file mode (default 0700)
;chown=nobody:nogroup       ; socket file uid:gid owner
;username=user              ; (default is no username (open server))
;password=123               ; (default is no password (open server))

;[inet_http_server]         ; inet (TCP) server disabled by default
;port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for all iface)
;username=user              ; (default is no username (open server))
;password=123               ; (default is no password (open server))

[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)
;umask=022                  ; (process file creation umask;default 022)
;user=chrism                 ; (default is current user, required if root)
;identifier=supervisor       ; (supervisord identifier, default is 'supervisor')
;directory=/tmp              ; (default is not to cd during start)
;nocleanup=true              ; (don't clean up tempfiles at start;default false)
;childlogdir=/tmp            ; ('AUTO' child log dir, default $TEMP)
;environment=KEY=value       ; (key value pairs to add to environment)
;strip_ansi=false            ; (strip ansi escape codes in logs; def. false)


[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris              ; should be same as http_username if set
;password=123                ; should be same as http_password if set
;prompt=mysupervisor         ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history  ; use readline history if available


;一般配置files 在文件夹下,方便管理
[include]
files = /etc/supervisord.d/*.ini

配置完成 :wq 保存退出

后续讲解监控进程在详细 配置 /etc/supervisord.d/*.ini

离线安装

有时候服务器只能内网访问,无法访问外网资源时需要自行下载gz包,解压安装,安装supervisor之前需要安装两个依赖:

  1. 安装 setuptools

    下载地址:setuptools-0.7.2.tar.gz
    安装指令:

    tar -zxvf setuptools-0.7.2.tar.gz 
    cd setuptools-0.7.2
    python setup.py build
    python setup.py install `
    
  2. 安装 meld3

    下载地址:meld3-2.0.1.tar.gz
    安装指令:

    tar -zxvf meld3-2.0.1.tar.gz
    cd meld3-2.0.1
    python setup.py install
    
  3. 安装supervisor 下载地址:supervisor-3.3.4.tar.gz 安装指令:

    tar -zxvf supervisor-3.3.4.tar.gz
    cd supervisor-3.3.4
    python setup.py install
    

验证是否安装成功supervisorctl --help

配置config 跟在线安装一致, 可执行 echo_supervisord_conf > /etc/supervisor/supervisord.conf 生成一个配置文件模板

配置

监控进程

spring boot 项目

配置启动脚本

假设有一个java项目admin-srv.jar 一般后台启动命令 脚本启动 ./start.sh 如下

#!/bin/bash
nohup java -server -d64 -Xmx1024m -Xms1024m  -jar admin-srv.jar --spring.profiles.active=test >out.file 2>&1

该脚本属于后台启动java程序,需要做改为 非 daemon 程序 ,改动后脚本如下

#!/bin/bash
exec java -server -d64 -Xmx1024m -Xms1024m  -jar admin-srv.jar --spring.profiles.active=test >out.file 2>&1

配置supervisor ini文件

supervospord.conf 文件 配置的files = /etc/supervisord.d/*.ini 创建一个 admin-srv.ini 文件

[program:admin-srv]
command=/.../start.sh  #运行程序的命令,这里是执行start.sh
directory=/.../ #存放项目的路径,这里可不写
stdout_logfile=/.../admin-srv-stdout.out #日志
stderr_logfile=/.../admin-srv-stderr.out
stdout_logfile_backups = 20
stdout_logfile_maxbytes=50MB
autostart=true #程序启动 后是否自动重启
autorestart=true #程序意外退出是否自动重启
startretries=3 #重试次数
startsecs=30 #验证程序启动时间
priority=30 #启动顺序相关
stopasgroup=true
killasgroup=true
user=root #启动时使用的用户

启动

配置完成后 执行:
supervisorctl update 更新配置
supervisorctl start admin-srv 启动服务

注意点

可能遇到的问题:

  1. java 程序使用 daemon 方式 启动 导致 supervisor 快速启动重试 报错

redis

安装redis 后,假设启动命令为 /usr/bin/redis-server /etc/redis.conf

配置redis文件

配置redis.conf 为非 后台启动

# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize no

配置supervisor ini文件

supervospord.conf 文件 配置的files = /etc/supervisord.d/*.ini 创建一个 redis.ini 文件

[program:redis]
command=/usr/bin/redis-server /etc/redis.conf
directory=/.../ #存放项目的路径,这里可不写
stdout_logfile=/.../admin-srv-stdout.out #日志
stderr_logfile=/.../admin-srv-stderr.out
stdout_logfile_backups = 20
stdout_logfile_maxbytes=50MB
autostart=true #程序启动 后是否自动重启
autorestart=true #程序意外退出是否自动重启
startretries=3 #重试次数
startsecs=30 #验证程序启动时间
priority=30 #启动顺序相关
stopasgroup=true
killasgroup=true
user=root #启动时使用的用户

启动

配置完成后 执行:
supervisorctl update 更新配置
supervisorctl start redis 启动服务

开机启动设置

通过 systemd services 来实现自启动

  1. 进入目录 /usr/lib/systemd/system/ 创建文件 supervisord.service
#supervisord.service

[Unit]
Description=Supervisor daemon

[Service]
Type=forking
ExecStart=/.../supervisord -c /.../supervisord.conf
ExecStop=/.../supervisorctl shutdown
ExecReload=/.../supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

  1. 启用服务 systemctl enable supervisord
  2. 启动服务 systemctl start supervisord
  3. 验证服务 systemctl is-enabled supervisord

具体可参考博客:blog.csdn.net/fullbug/art…

参考文档

本文只为学习记录,侵删。

www.cnblogs.com/jlonghe/p/1…
blog.csdn.net/finghting32…
blog.csdn.net/fullbug/art…