阿里云服务器(centos)上用Supervisor进程管理工具

189 阅读4分钟

需求描述

centos上一般会运行较多程序,例如nginx,redis,mysql,以及各种java开发的spring boot jar程序,如何找一款进程管理工具,它可以自动把它们管理起来,通过它自动能加入centos自启动项中,以及如果异常它会自动维护,即重启。那么supervisor就是这样的一款进程管理工具,同时能批量启动一批程序或者重启或者关闭一批程序。

Supervisor进程管理工具

  • Supervisor只管理非daemon即非守护进程,否则提示Exited too quickly。
  • 监听进程,有异常例如某一个进程意外杀死了,它会重启各个进程程序;
  • 启动:批量启动,指定进程启动
  • 停止:批量停止,指定进程停止
  • 重启:批量重启,指定进程重启

supervisor安装

它主要会安装supervisor服务端以及supervisorctl客户端(主要支持命令)

安装方式一:
    yum install -y epel-release
    yum -y install supervisor (需要上方的支持才能安装)
安装方式二:
    pip install supervisor

安装成功后的验证:
  #  supervisorctl --help
  通常它会centos的/etc/

supervisor初始化

通过echo_supervisord_conf 程序生成superviosr的初始化配置

mkdir /etc/supervisor
echo_supervisor_conf > /etc/supervisor/supervisord.conf

// 创建各个程序配置文件放置的目录config.d
mkdir /etc/superviosr/config.d  

vim /etc/supervisor/supervisord.conf 增加以下内容:
[include]  files = config.d/*.conf

某一个spring boot jar程序它的supervisor配置 (即放到config.d目录下的gwork-api.conf

注意supervisor的conf文件注释不能用#,而是用;

;进程名
[program:gwork-admin]
;程序目录
directory = /data/gwork/gworkapi
;执行进程的命令,确认jar同级有一个config目录有appliction.yml和application-pro.yml
command = /usr/bin/java -jar gwork-admin.jar -Dspring.profiles.active=prod
;随着supervisord启动而启动
autostart = true
;启动后5秒没有异常退出,正式启动,默认为1秒
startsecs = 5
;程序异常退出后自动重启 包括supervisor重启
autorestart = true
;启动失败后自动重启次数,默认为3
startretries = 3
;用哪个用户启动,尽量配成普通用户来运行,别配成root
user = surong
;进程启动的优先级,默认为999,值小的优先启动
;priority = 691
;把stderr 重定向到stdout,默认 false
redirect_stderr = true
;stdout日志文件大小,默认50MB
stdout_logfile_maxbytes = 20MB
;stdout 日志文件备份数,默认是10
stdout_logfile_backups = 20
;stdout日志文件没有这个目录时无法启动 需要手工去创建目录(它的日志文件则supervisord会自动创建日志文件
stdout_logfile = /data/logfile/gwork-admin-access.log
stderr_logfile = /data/logfile/gwork-admin-error.log
;默认为 false, 进程被杀死时,是否向这个进程组发送 stop 信号,包括子进程
;stopasgroup=false
;默认为 false,向进程组发送 kill 信号,包括子进程
;killasgroup=false
;杀死进程的信号量:kill -9KILL; kill -2INT; kill -15TERM 默认配置
;stopsignal=KILL


supervisor常用命令

检查某一个程序是否启动起来了

supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep gwork-api

修改了配置文件(修改或者新增了某一个程序的conf)为了使其生效

// 重新启动配置中的所有程序
supervisorctl reload

// 更新新的配置到supervisord
supervisorctl update

# 如何把supevisor本身进程工具放到centos自启动中
## 先了解什么是# systemctl

```js
systemctl是linux本身带的一个进程管理工具,主要用来启动、停止、重启和重新加载服务、查看服务状态。
启动一个服务:systemctl start 服务名
停止一个服务:systemctl stop 服务名
重启一个服务:systemctl restart 服务名
重新加载一个服务的配置: systemctl reload 服务名
查看服务状态: systemctl status 服务名
将一个服务设置为开机自启动: systemctl enable 服务名称
取消一个服务的开机重启动: systemctl disable 服务名称
列出所有已启用的服务
systemctl list-unit-files --state=enabled  //例如所有程序通过supervisor来管理的,所以它不会显示在这个服务清单只,它只会显示superviosr这个进程在系统的自启动中。

如何把supervisor本身配到centos自启动中

步骤一:在本地机mac或者服务器上用vim编辑一个supervisord.service文件,内容如下:
# supervisord service for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon

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

[Install]
WantedBy=multi-user.target
步骤二: 把它复制或者(本地用ftp工具上传到) 
/usr/lib/systemd/system/supervisord.service
步骤三:执行命令: systemctl enable supervisord
步骤四: 执行命令来验证是否为开机启动
systemctl is-enabled supervisord

其他常用命令

supervisorctl restart 服务名
supervisorctl stop 服务名
supervisorctl start 服务名
supervisorctl restart all
supervisorctl stop all
supervisorctl start all

supervisor缷载

使用yum命令卸载supervisor
yum remove supervisor
删除supervisor配置文件
rm -rf /etc/supervisor/
删除supervisor日志文件
rm -rf /var/log/supervisor/