抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Supervisor 是什么?

Supervisor 是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。

Supervisor 能干什么?

Supervisor 帮助我们解决在开发过程中遇到的以下问题:

  • ASP.NET Core 应用程序运行在 shell 之中,如果关闭 shell 则会发现 ASP.NET Core 应用被关闭,从而导致应用无法访问,这种情况当然是我们不想遇到的,而且生产环境对这种情况是零容忍的。
  • 如果 ASP.NET Core 进程意外终止那么需要人为连进 shell 进行再次启动,往往这种操作都不够及时。
  • 如果服务器宕机或需要重启我们则还是需要连入shell进行启动。

安装 Supervisor

首先安装 Python 包管理工具(Supervisor 使用 Python 开发的),然后再安装 supervisor。

1
2
yum install python-setuptools
easy_install supervisor

supervisor 安装完成后会生成三个执行程序:

  • *supervisortd *:supervisor 的守护进程服务(用于接收进程管理命令)
  • *supervisorctl *:客户端(用于和守护进程通信,发送管理进程的指令)
  • *echo_supervisord_conf *:生成初始配置文件程序。

配置 Supervisor

添加 supervisor 文件夹以及 conf.d 配置文件夹

1
2
3
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
mkdir /etc/supervisor/conf.d

修改supervisord.conf文件,在文件尾部:

1
2
[include]
files=/etc/supervisor/conf.d/*.conf

启动 Supervisor 服务

1
supervisord -c /etc/supervisor/supervisord.conf

program 的配置

在 supervisor 的 conf.d 文件夹下新建一个程序配置文件,NetCoreWebDemo.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#配置程序名称
[program:NetCoreWebDemo]
#运行程序的命令
command=dotnet NetCoreWebDemo.dll
#命令执行的目录
directory=/usr/local/bin/NetCoreWebDemo/
#错误日志文件
stderr_logfile=/var/log/NetCoreWebDemo.err.log
#输出日志文件
stdout_logfile=/var/log/NetCoreWebDemo.out.log
#进程环境变量
environment=ASPNETCORE_ENVIRONMENT=Production
#进程执行的用户身份
user=root
#程序是否自启动
autostart=true
#程序意外退出是否自动重启
autorestart=true
#启动时间间隔(秒)
startsecs=5
stopsignal=INT

重载 Supervisor 的配置文件

1
supervisorctl reload #重新加载配置文件

客户端相关命令

1
2
3
4
5
6
supervisorctl status #查看程序配置的状态
supervisorctl stop programname #停止某一个程序配置
supervisorctl start programname #加载某一个程序配置
supervisorctl restart programname #重新加载某一个程序配置
supervisorctl reload #重新加载配置
supervisorctl update

查看配置程序是否启动:

1
ps -ef | grep NetCoreWebDemo #programdllname

如果出现 dotnet NetCoreWebDemo.dll 这一行进程,则说明配置成功

设置 Supervisor 开机启动

/usr/lib/systemd/system 文件夹下新建 supervisor.service 配置文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=supervisor
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target

将服务设置为开机启动:

1
2
systemctl enable supervisor.service
systemctl start supervisor.service

其它命令:

1
2
3
4
5
systemctl is-enabled supervisord #来验证是否为开机启动

systemctl stop supervisord #关闭
systemctl disable supervisord #禁用
systemctl status supervisor #查看服务状态

配置 Supervisor 图形化管理

打开 supervisor 的配置文件

1
vim /etc/supervisor/supervisord.conf

找到配置:

1
2
3
4
;[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))ls
;password=123 ; (default is no password (open server))

修改成:

1
2
3
4
[inet_http_server] ; inet (TCP) 服务,默认是关闭的
port=*:9001 ;ip:端口,*代表所有IP
username=root ;登陆账号,可以不设
password=root123 ;登陆账户,可以不设

保存好修改后,重启 supervisor。

1
supervisorctl reload

防火墙查看 9001 端口是否开启

1
firewall-cmd --list-ports #查看已开放的端口

开启端口:

1
2
firewall-cmd --zone=public  --add-port=9001/tcp --permanent
firewall-cmd --reload #重启防火墙

命令含义

1
2
3
--zone #作用域
--add-port=9001/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效

打开浏览器输入:<192.168.8.8:9001>即可成功访问。

评论