使用Supervisor 管理.net core mvc部署

简介: Supervisor简介Supervisor是一个用python编写的,linux平台下的进程守护工具,它通过子进程的方式运行目标服务。相比rc.d脚本,它能更加方便地知道子进程发生了什么,并在其崩溃时自动重启子进程。

Supervisor简介

Supervisor是一个用python编写的,linux平台下的进程守护工具,它通过子进程的方式运行目标服务。相比rc.d脚本,它能更加方便地知道子进程发生了什么,并在其崩溃时自动重启子进程。

Supervisor著称的特点

简单

通过简单的INI风格配置文件进行配置

集中

通过Ctl工具统一管理所有应用的启动,停止和监控,也可以配置Web或远程命令行

高效

通过fork / exec启动其子进程。当某个进程终止时,操作系统会立即向Supervisor发出信号,而不像某些依赖麻烦PID文件和定期轮询来重启失败进程的解决方案。

可扩展

通过一个简单的事件通知协议,用任何语言编写的程序都可以用来监视它,并且有一个XML-RPC接口用于控制。

兼容性强

可以处理除Windows以外的所有内容。它在Linux,Mac OS X,Solaris和FreeBSD上经过测试和支持。它完全用Python编写,因此安装不需要C编译器。

主要组成部分

服务(supervisord)

它负责在自己的调用中启动子程序,响应来自客户端的命令,重启崩溃或退出的子过程,记录其子过程stdout和stderr输出,以及生成和处理与子过程生存期中的点相对应的“事件”。

控制台(supervisorctl)

它提供了一个类似shell的界面,通过它可以连接到不同的supervisord进程(一次一个),获取受控制的子进程的状态,停止并启动子进程,并获取正在运行的进程列表。

Web服务

激活配置文件的[inet_http_server]部分后,访问服务器URL(例如http:// localhost:9001/)以通过Web界面查看和控制进程状态。

XML-RPC接口

HTTP服务器提供了一个XML-RPC接口,用于查询和控制管理程序及其运行的程序。

实验环境

实验过程

1、首先我们发布一个.net core mvc应用,这里是一个叫smartops的应用,存放在/home/root/smartops文件夹下,启动入口为SmartOps.Web.dll,可以通过dotnet SmartOpw.Web.dll启动应用

2、执行下列命令安装supervisor

cd /home
wget [https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-7.noarch.rpm](https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-7.noarch.rpm)
rpm -ivh epel-release-latest-7.noarch.rpm
yum install supervisor -y

安装完成后,我们到配置目录去添加一个smartops的配置

cd /etc/supervisord.d/
vim smartops.ini

添加配置为

#冒号后面为应用名称
[program:smartops]
#应用启动命令,需要dotnet的完整路径
command=/usr/share/dotnet/dotnet /home/root/smartops/SmartOps.Web.dll
#启动的目录,否则应用会报找不到appsetting.json错误
directory=/home/root/smartops
#服务启动时自动启动,崩溃自动重启
autostart=true
autorestart=true
# .net core mvc应用启动参数,表明是生产环境
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
# 日志输出路径
stdout_logfile=/var/log/supervisor/smartops.log
stderr_logfile=/var/log/supervisor/smartops.err.log

启动或重启supervisord服务,重新加载配置

systemctl restart supervisord

为了能更面捷的管理,我们打开Web管理控制台
取消[inet_http_server]下面这几行的注释,并将port改为 *:9001

vim /etc/supervisor.conf

[inet_http_server]         ; inet (TCP) server disabled by default
port=*: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))

保存,重启supervisor服务,输入 http://192.168.0.195:9001,提示需要输入密码,用户名为user,密码123

img_6f29e3e51bc9ac67238bce64368305d6.png
管理控制台

在这里可以看到我们刚才运行的smartops的状态,当我们上传了更新后,点击restart即可重新运行应用,不需要再像以前那样先kill进程,再重新运行dotnet xxx.dll

img_696736911a10081575e0f832f295f947.png
ROLLAWAY

常见问题

1、无法启动服务,报File Not found

应写全dotnet的路径

2、无法找到appsetting.json错误

应提供directory参数,为应用根目录

引用

Supervisor offical Introduction

相关文章
|
7天前
|
Cloud Native API C#
C#的现代化:.NET Core引领的技术革命
【6月更文挑战第9天】`.NET Core引领C#现代化,实现跨平台革命,提升性能并支持云原生应用。异步编程模型优化体验,统一API简化开发流程。C#应用场景扩展,开发效率提高,技术创新加速,预示其未来在技术领域将持续发挥关键作用。`
25 10
|
10天前
|
开发框架 .NET Linux
【.NET Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
该文介绍了如何不使用VS2019手动创建ASP.NET Core Blazor项目的Dockerfile并构建Docker镜像。首先,创建名为Dockerfile的文件,并复制提供的Dockerfile内容,该文件指定了基础镜像和工作目录。然后,通过CMD在项目目录下运行`docker build -t 自定义镜像名 .`来生成镜像。最后,使用`docker run`命令启动容器并验证项目运行。此外,文章还提到了将镜像推送到Azure Container Registry (ACR)的步骤。
|
10天前
|
Linux C# C++
【.NET Developer】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
本文介绍了如何使用VS2019和.NET框架创建一个Blazor应用,并将其部署到Azure应用服务。首先,Blazor是一个使用C#而非JavaScript构建交互式Web UI的框架,支持共享服务器和客户端应用逻辑,以及与Docker和Azure集成。任务包括创建Blazor项目,配置Dockerfile为Linux容器,本地测试,发布到Azure Container Registry (ACR),然后在Azure App Service for Container上部署。在部署过程中,需确保Docker设置正确,开启ACR的Admin访问权限,并监控镜像拉取和容器启动日志。
|
11天前
|
XML 开发框架 人工智能
C#/.NET/.NET Core拾遗补漏合集(24年5月更新)
C#/.NET/.NET Core拾遗补漏合集(24年5月更新)
|
11天前
|
开发框架 .NET API
ASP.NET Core Web中使用AutoMapper进行对象映射
ASP.NET Core Web中使用AutoMapper进行对象映射
|
11天前
|
前端开发 Java C#
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
|
12天前
|
存储 开发框架 缓存
【.NET Core】你真的了解HttpRuntime类吗
【.NET Core】你真的了解HttpRuntime类吗
10 0
|
12天前
|
前端开发 C#
【.NET Core】你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟
【.NET Core】你认识Attribute之CallerMemberName、CallerFilePath、CallerLineNumber三兄弟
27 0
|
12天前
|
安全 C#
【.NET Core】深入理解IO - 读取器和编写器
【.NET Core】深入理解IO - 读取器和编写器
24 5
|
12天前
|
存储 网络协议 程序员
【.NET Core】.NET中的流(Stream)
【.NET Core】.NET中的流(Stream)
24 7