zoukankan      html  css  js  c++  java
  • CentOS8.2+Supervisor部署.NET 5.0应用

    前言:

      很久没写博客了,这两天工作比较少,脑袋“发热”买了台阿里云服务器,配置1核2G内存,系统选择CentOS8.2,还申请了个自己的域名,总共花了110块RMB。目的是想自己写点东西验证一下。

    先简单写个demo部署到服务器上,验证环境和网络是否正常。

    准备

      创建一个名称为Research.Web的ASP.NET Core项目,目标框架.NET Core5.0,发布后用xftp上传到服务器/prodic/research.web目标。  

    使用xshell登录服务器,登录账号用root

    安装aspnetcore运行时命令

    sudo dnf install aspnetcore-runtime-5.0
    

      使用dotnet Research.Web.dll命令运行程序,一切正常,浏览器访问如下(建议大家发布的时候用该命令运行一下,避免因程序有问题造成发布后无法访问。)

      接下来需要一个守护进程工具管理进程,并且系统启动时自动启动我的web站点。因为以前在工作中使用过国内大牛宇内**写的jexus,所以一开始想用jexus,但又看到很多同行使用Supervisor来作为.NET Core站点的进程守护工具,看了介绍和几篇博客后觉得Supervisor简单易用,当然jexus用起来也很简单,而且功能强大。但是我没用过Supervisor,所以想用一用,最终决定选择Supervisor,官方网址:https://pypi.org/project/supervisor。

    Supervisor官方介绍

      Supervisor是一个客户端/服务器系统,允许其用户控制类似UNIX的操作系统上的许多进程。

    支持平台

      Supervisor已经过测试,并且已知可以在Linux(Ubuntu),Mac OS X(10.4、10.5、10.6)和Solaris(对于Intel为10)和FreeBSD 6.1上运行。在大多数UNIX系统上,它可能会正常工作。

      Supervisor将无法在任何Windows版本下运行。

      Supervisor旨在在Python 3版本3.4或更高版本以及Python 2版本2.7上工作。

    Supervisor安装

    注意,本文中因为使用root账号登录,所有命令前不需要加suto,不是root账号或者没有对应权限的请在命令前添加sudo,如sudo yum install supervisor。

    安装命令

    yum install supervisor

      

     安装完成可以看到版本号为4.2.1……

    安装成功后,在/etc/目录下会自动生成supervisord.conf文件和supervisord.d目录,如下图所示

     说明:

    supervisord.conf文件是supervisor自身的配置文件

    supervisord.d目录是用来存放被守护进程的配置文件

    配置守护进程配置目录

    接下来添加并配置supervisor要守护的进程配置文件。

    用命令vi打开supervisord.conf文件,在文件内容末尾找到

    [include]
    files = supervisord.d/*.ini

    如果不是该配置请改为该配置,如果行前面有分号,则去掉分号。

    意思就是包含supervisord.d目录下所有以ini结尾的配置文件。后面我们将会把需要守护的进程配置添加到这个目录中。

     然后敲Esc键,输入:wq退出。

    添加被守护进程配置文件

    接下来进入到supervisor.d目录,在supervisord.d目录中添加research.web.ini配置文件

    添加文件命令

    touch research.web.ini

      编辑research.web.ini文件,将以下内容添加到文件中

    [program:research.web]
    command=dotnet Research.Web.dll ; 运行程序的命令
    directory=/prodic/research.web/ ; 命令执行的目录
    autorestart=true ; 程序意外退出是否自动重启
    stderr_logfile=/var/log/researchweb/researchweb.err.log ; 错误日志文件
    stdout_logfile=/var/log/researchweb/researchweb.out.log ; 输出日志文件
    environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
    user=root ; 进程执行的用户身份
    stopsignal=INT

    然后敲Esc键,输入:wq退出编辑。

    执行以下命令使配置生效

    systemctl enable supervisord.service

     执行以下命令重新载入配置,并重启supervisor服务

    supervisorctl reload

     

     查看运行状态命令

    supervisorctl status

     这里可以看到supervisor守护了两个进程,分别是pudefu.web和research.web(上文添加的被守护进程)。 

    配置supervisor开机自动启动

    执行命令检查开机配置是否已经存在

    systemctl enable supervisord.service

    返回Failed to enable unit:Unit file supervisord.service does not exist.表示不存在。

     定位到/lib/systemd/system目录下,并创建supervisord.service文件

    创建supervisord.service文件命令

    touch supervisord.service

     接着使用vi命令编辑supervisord.service文件,将以下代码复制到文件中

    [Unit]
    Description=Supervisor Process Monitoring and Control Daemon
    After=network.target
    
    [Service]
    Type=forking
    ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
    ExecStop=/usr/bin/supervisorctl shutdown
    ExecReload=/usr/bin/supervisorctl reload
    KillMode=process
    Restart=on-failure
    RestartSec=42s
    
    [Install]
    WantedBy=multi-user.target

    保存并退出。

    重新载入守护进程并启动

    systemctl daemon-reload
    
    systemctl start supervisord.service

     执行以下命令检查是否开机启动

    systemctl enable supervisord.service

     如果没有返回Failed to enable unit:Unit file supervisord.service does not exist.表示开机启动已经配置成功。至此,配置完成。

    supervisor常用命令

    supervisord  //初始启动Supervisord,启动、管理配置中设置的进程。

    supervisorctl status     //查看所有任务状态信息

    supervisorctl reload   //重新启动并载入最新的配置文件,并按新的配置启动、管理所有进程。

    supervisorctl shutdown    //关闭所有任务(关闭后用reload重启)

    supervisorctl start all          //启动所有进程

    supervisorctl stop all          //停止所有进程

    supervisorctl restart all       //重启所有进程(restart不会重新载入最新的配置文件。可使用reload或者update命令)

    supervisorctl start|stop|restart <name>   //控制指定进程,name为进程名称

    supervisorctl version  //查看版本号

    supervisorctl pid  //查看进程id

    supervisorctl tail [-f] <name> [stdout | stderr](默认stdout)  //查看进程日志信息,stdout是普通日志,stderr是错误日志

    supervisorctl clear <name> //清空指定进程的日志,name为进程名称

    supervisorctl clear all //清空所有进程日志

  • 相关阅读:
    Redis之主从复制原理
    字符编码
    Android studio报错 "No IDEA annotations attached to the JDK 1.8, some issues will not be found" 解决方法
    json
    ajax
    《人月神话》读后感(三)
    Jquery基础
    EL表达式
    Android Studio更改虚拟机位置
    Mybatis之mybatis的介绍
  • 原文地址:https://www.cnblogs.com/pudefu/p/14794806.html
Copyright © 2011-2022 走看看