为什么要用supervisor
1.减少敲命令的时间成本
2.进程守护,应用被杀掉后自动重启
3.方便日志跟踪、在线查看应用状态、在线重启应用等
与jenkins并不冲突,互补
- 依旧可以使用jenkins进行部署
- 对于应用重启,不再需要执行整个重构步骤,也不需要开发人员登录服务器敲命令,减少操作成本
安装
# epel源
yum install -y epel-release
# 安装supervisor
yum install -y supervisor
# 开机自启动
systemctl enable supervisord
# 启动supervisord服务
systemctl start supervisord
Bash
生成配置
1、创建文件夹夹
cd /data && mkdir supervisor && cd supervisor && mkdir tmp && mkdir conf.d
2、修改主配置文件
/etc/supervisord.conf
修改配置(可直接复制覆盖/etc/supervisord.conf),如果发生端口冲突,修改第2行和第27行端口号
[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; ip_address:port specifier, *:port for all iface
username=admin ; default is no username (open server)
password=admin ; default is no password (open server)
[supervisord]
logfile=/data/supervisor/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; # of main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
pidfile=/data/supervisor/tmp/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=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
username=admin ; should be same as in [*_http_server] if set
password=admin ; should be same as in [*_http_server] if set
[include]
files = /data/supervisor/conf.d/*.conf
编写应用:/data/supervisor/conf.d/应用名.conf,示例:
; 网关
[program:cloud-gateway-10000] ; 应用名称
command=java -Xms256m -Xmx256m -jar cec-gateway.jar --spring.profiles.active=test ; 被监控的进程命令
directory=/data/cloud/server/cec-gateway ; 目录
priority=1 ; 数字越高,优先级越高
numprocs=1 ; 启动几个进程
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout
相关命令
systemctl stop supervisord
systemctl start supervisord
systemctl status supervisord
systemctl restart supervisord
#更新配置
supervisorctl update
#启动应用
supervisorctl start [应用名]
#关闭应用
supervisorctl stop [应用名]
#重启应用
supervisorctl restart [应用名]
#监听应用输出
supervisorctl tail -f [应用名]