linux 使用Supervisor部署.net core程序(一)
1 | 注意:部署程序需要开放程序所需端口;查看开放端口:ss -tuln开放端口:sudo firewall-cmd --permanent --add-port=22/tcp # 开放TCP协议的22端口(SSH)重新加载防火墙规则:sudo firewall-cmd --reload |
一、Supervisor
官网:http://supervisord.org,
源码位置:https://github.com/Supervisor/supervisor
- Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。
-
为什么要用Supervisor
在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。
由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。
但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。
此处的创建守护进程,是指发布在Linux上 asp.net core 程序的dotnet xxx.dll命令的宿主进程创建一个守护进程。在 Linux 上有很多可以管理进程的工具,我们使用 Supervisor 来做这个事情。
原因有两点:
①、它是微软官方文档推荐的,降低学习成本。
②、它并不一定是最好的,但一定是文档最全的。
-
Supervisor4大组件
- supervisord
主进程,负责管理进程的server,它会根据配置文件创建指定数量的应用程序的子进程,管理子进程的整个生命周期,对crash的进程重启,对进程变化发送事件通知等。同时内置web server和XML-RPC Interface,轻松实现进程管理。。该服务的配置文件在/etc/supervisor/supervisord.conf。
- supervisorctl
客户端的命令行工具,提供一个类似shell的操作接口,通过它你可以连接到不同的supervisord进程上来管理它们各自的子程序,命令通过UNIX socket或者TCP来和服务通讯。用户通过命令行发送消息给supervisord,可以查看进程状态,加载配置文件,启停进程,查看进程标准输出和错误输出,远程操作等。服务端也可以要求客户端提供身份验证之后才能进行操作。
- Web Server
superviosr提供了web server功能,可通过web控制进程(需要设置[inethttpserver]配置项)
- XML-R- #supervisor
一个Linux/Unix系统上的进程监控工具
一个Python开发的通用的进程管理程序
可以管理和监控Linux上面的进程
能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启
不过同daemontools一样,它不能监控daemon进程
- 安装Supervisor
相应安装建议以管理员方式登录系统,非管理员请以sudo命令安装。
Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
- 安装EPEL源的命令如下:sudo yum -y install epel- release
- 执行如下命令安装supervisor:sudo yum -y install supervisor
- 设置开机启动:systemctl enablesupervisord
- 启动supervisord:systemctl start supervisord
- 查看supervisord状态:systemctl status supervisord
- Supervisor配置及使用(特注:以下命令使用root用户权限执行)
- 打开配置文件:etc/supervisord.conf
- 添加配置文件:找到以下该项配置。poort表示默认端口,username表示用户名,password表示登录密码。
1234
[inet_http_server]
port=*:9001
username=user1
password=123456
- 打开supervisordweb页面:运行supervisorctl reload重新加载配置项。在页面输入localhost:9001看到如下页面即成功。
-
配置子程序及启动
- 在/etc/supervisord.d目录中新建文件xxx.ini文件。注意日志地址文件一定要先创建。
12345678910111213141516171819202122
[program:Demo] 表示什么程序
command=/bin/bash -c
"dotnet Demo.dll"
需要运行什么程序
directory=/opt/test/publish 程序根目录
autostart=
true
是否自启动
autorestart=
true
是否自动重启
logfile_maxbytes= 50MB 日志大小
logfile_backups= 10 日志备份个数
loglevel=info 日志等级
stdout_logfile=/opt/data/logs/test/test.
out
.log 日志输出地址
environment=ASPNETCORE_ENVIRONMENT=Production 环境变量
user=root 启动用户<br>
redirect_stderr=
true
把stderr重定向到stdout,默认
false
运行成功后,会显示运行程序
- 在/etc/supervisord.d目录中新建文件xxx.ini文件。注意日志地址文件一定要先创建。
- 添加配置文件:找到以下该项配置。poort表示默认端口,username表示用户名,password表示登录密码。
- 打开配置文件:etc/supervisord.conf
__EOF__

本文链接:https://www.cnblogs.com/yeyuqian/p/18333259.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!