共计 4256 个字符,预计需要花费 11 分钟才能阅读完成。
置顶:
推荐使用 pip install supervisor 安装最新版 supervisor,yum install supervisor 最高版本 3.1.4,有很多 bug
名称解释
supervisor:要安装的软件的名称。
supervisord:装好 supervisor 软件后,supervisord 用于启动 supervisor 服务。
supervisorctl:用于管理 supervisor 配置文件中 program。
使用 yum 安装
yum install epel-release
yum install supervisor
systemctl enable supervisord.service # 开机自启动
systemctl start supervisord.service # 启动 supervisord 服务
systemctl status supervisord.service # 查看 supervisord 服务状态
# 开启 web 服务: 修改 supervisord.conf ,inet_http_server 节点取消注释。vim /etc/supervisord.conf
supervisorctl reload
[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; (ip_address:port specifier, *:port for all iface)
username=clark ; (default is no username (open server))
password=123456 ; (default is no password (open server))
ps -ef|grep supervisord # 查看是否存在 supervisord 进程
应用配置
Supervisor 管理应用的进程,需要对每个应用进行配置。在 /etc/supervisord.d
中创建 helloworld.ini
,每个应用对应一个配置文件即可。
下面是配置文件的示例:
[program:helloworld] ; 程序的名称
command = dotnet HelloWorld.dll ; 执行的命令
directory = /root/www/ ; 命令执行的目录
environment = ASPNETCORE__ENVIRONMENT=Production ; 环境变量
user = root ; 执行进程的用户
stopsignal = INT
autostart = true ; 是否自动启动
autorestart = true ; 是否自动重启
startsecs = 1 ; 自动重启间隔
stderr_logfile = /var/log/helloworld.err.log ; 标准错误日志
stdout_logfile = /var/log/helloworld.out.log ; 标准输出日志
实际项目:
supervisor 部署:cd /etc/supervisord.d/
vim product_new_merchant.ini
[program:product_new_merchant]
user = root
directory = /root/data_hub/all_script
command = /root/.virtualenvs/ProductNewMerchant/bin/python3.7 product_new_merchant.py
autostart = true
autorestart = true
startsecs = 1
environment = MYSQL_HOST="192.168.6.160",MYSQL_DATABASE="xxxxx",MYSQL_USER_NAME="xxxxxx",MYSQL_PASSWORD="xxxxx",MYSQL_PORT=3306,REDIS_HOST="192.168.95.55",LANG="en_US.utf8",LC_ALL="en_US.UTF-8",LC_LANG="en_US.UTF-8"
stdout_logfile = /var/log/product_new_merchant.log
redirect_stderr=true
stopsignal = INT
创建好配置文件后,重启 Supervisor
supervisorctl reload
或热重启,不会重启其他子进程
supervisorctl reread
supervisorctl update
为确保没有错误,可以正常启动,使用前文提到的查看 Supervisor 状态的命令查看。或者查看要管理的进程是否启动,本例中可以使用下面的命令:
ps -ef | grep HelloWorld.dll
或
ps -ef | grep dotnet
可能遇到的问题
1、我在网页上 tail 的时候,要不就是一直不返回,要不就是 Error response
Error code 410.
Message: Gone.
2、stderr_logfile 和 stdout_logfile 颠倒
3、web 界面中文乱码
参考:https://www.crifan.com/upgrad…
3.1.4 老版本,升级最新版
[root@web-95-55 admin]# supervisord --version
3.1.4
备份 yum 版本 supervisor 配置文件,供参考:
yum remove supervisor
yum remove python-meld3
pip install supervisor
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
vim /etc/supervisor/supervisord.conf
修改应用配置文件路径:;[include]
files = /etc/supervisor/config.d/*.ini
mkdir /etc/supervisor/config.d
cd /etc/supervisor/config.d
启动 supervisor:supervisord -c /etc/supervisor/supervisord.conf
附:公司运维小哥笔记
yum install supervisor -y
supervisor 配置说明
通过这种形式安装的 supervisor,其配置文件的目录位于:/etc/supervisord.conf (主配置文件,下面会详细介绍)
/etc/supervisor.d/ (默认子进程配置文件,也就是需要我们根据程序配置的地方)
[unix_http_server]
file=/home/supervisor/supervisor.sock ; supervisorctl 使用的 socket 文件的路径
;chmod=0700 ; 默认的 socket 文件权限 0700
;chown=nobody:nogroup ; socket 文件的拥有者
[inet_http_server] ; 提供 web 管理后台管理相关配置
port=0.0.0.0:9001 ; web 管理后台运行的 ip 地址及端口,绑定外网需考虑安全性
;username=root ; web 管理后台登录用户名密码
;password=root
[supervisord]
logfile=/var/log/supervisord.log ; 日志文件,默认在 $CWD/supervisord.log
logfile_maxbytes=50MB ; 日志限制大小,超过会生成新文件,0 表示不限制
logfile_backups=10 ; 日志备份数量默认 10,0 表示不备份
loglevel=info ; 日志级别
pidfile=/home/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid ; pid 文件
nodaemon=false ; 是否在前台启动,默认后台启动 false
minfds=1024 ; 可以打开文件描述符最小值
minprocs=200 ; 可以打开的进程最小值
[supervisorctl]
serverurl=unix:///home/supervisor/supervisor.sock ; 通过 socket 连接 supervisord, 路径与 unix_http_server->file 配置的一致
[include]
files = supervisor.d/*.conf ; 指定了在当前目录 supervisor.d 文件夹下配置多个配置文件
定义 supervisor 管理进程配置文件
[program:sboot] ;[program:xxx] 这里的 xxx 是指的项目名字
directory = /opt/project ; 程序所在目录
command = java -jar springboot-hello-sample.jar ; 程序启动命令
autostart=true ; 是否跟随 supervisord 的启动而启动
autorestart=true; 程序退出后自动重启, 可选值:[unexpected,true,false],默认为 unexpected,表示进程意外杀死后才重启
stopasgroup=true; 进程被杀死时,是否向这个进程组发送 stop 信号,包括子进程
killasgroup=true; 向进程组发送 kill 信号,包括子进程
stdout_logfile=/var/log/sboot/supervisor.log; 该程序日志输出文件,目录需要手动创建
stdout_logfile_maxbytes = 50MB; 日志大小
stdout_logfile_backups = 100; 备份数
service supervisord restart
直接在命令行输入 supervisorctl 会展示当前已配置好的项目信息。[root@wangzh supervisor.d]# supervisorctl
sboot RUNNING pid 27517, uptime 0:18:04
supervisor>
然后可以执行
start/stop/restart sboot 来简单控制项目的启停等
supervisorctl update #更新配置文件
supervisorctl reload #重新启动配置的程序
supervisorctl stop all #停止全部管理进程
参考:
1、https://www.chengxulvtu.com/s…
2、https://blog.csdn.net/DongGeG…
正文完