linux 使用Supervisor部署.net core程序(一)
注意:部署程序需要开放程序所需端口;
查看开放端口: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表示登录密码。
[inet_http_server] port=*:9001 username=user1 password=123456
- 打开supervisordweb页面:运行supervisorctl reload重新加载配置项。在页面输入localhost:9001看到如下页面即成功。
-
配置子程序及启动
- 在/etc/supervisord.d目录中新建文件xxx.ini文件。注意日志地址文件一定要先创建。
[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 启动用户
redirect_stderr= true 把stderr重定向到stdout,默认 false运行成功后,会显示运行程序
- 在/etc/supervisord.d目录中新建文件xxx.ini文件。注意日志地址文件一定要先创建。
- 添加配置文件:找到以下该项配置。poort表示默认端口,username表示用户名,password表示登录密码。
- 打开配置文件:etc/supervisord.conf