supervisor 安装及使用
使用supervisor管理进程,可以对进程进行监听、启动、停止。
安装&配置
直接下载安装
安装命令
- 安装 epel-release
yum install epel-release - 安装 supervisor
yum install -y supervisor - 验证是否成功
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之前需要安装两个依赖:
-
安装 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 ` -
安装 meld3
下载地址:meld3-2.0.1.tar.gz
安装指令:tar -zxvf meld3-2.0.1.tar.gz cd meld3-2.0.1 python setup.py install -
安装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 启动服务
注意点
可能遇到的问题:
- 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 来实现自启动
- 进入目录
/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
- 启用服务
systemctl enable supervisord - 启动服务
systemctl start supervisord - 验证服务
systemctl is-enabled supervisord
具体可参考博客:blog.csdn.net/fullbug/art…
参考文档
本文只为学习记录,侵删。
www.cnblogs.com/jlonghe/p/1…
blog.csdn.net/finghting32…
blog.csdn.net/fullbug/art…