zoukankan      html  css  js  c++  java
  • netcore项目在Centos部署:nohup和supervisor方式

    Centos上部署netcore项目

    1 准备工作

      在Centos上部署netcore应用程序有两种常用方式:nohup和supervisord,这里简单演示一下这两种部署方式。

    首先我们写一个简单的netcore控制台项目(netcore mvc、webapi本质都是一个控制台项目),项目名称就叫HelloWorld,代码如下:

        class Program
        {
            static void Main(string[] args)
            {
                var tokenSource = new CancellationTokenSource();
                //业务,异步执行,每隔1秒输出一次working
                Task.Factory.StartNew(() =>
                {
                    while (!tokenSource.IsCancellationRequested)
                    {
                        Console.WriteLine($"{DateTime.Now}: Woking...........");
                        Thread.Sleep(1000);
                    }
                }).ContinueWith(t =>
                {
                    Console.WriteLine("成功退出!");
                    Environment.Exit(0);
                });
               
    
                //读取配置文件,如果配置文件stop为No,主线程休眠1秒
                var configuration = new ConfigurationBuilder()
                    .SetBasePath(Environment.CurrentDirectory)
                    .AddJsonFile("setttings.json",optional:true,reloadOnChange:true)
                    .Build();
                while ("No".Equals(configuration["stop"], StringComparison.CurrentCultureIgnoreCase)){
                    Thread.Sleep(1000);
                }
    
                //让异步业务结束
                tokenSource.Cancel();
            }
        }

      代码执行一个异步任务,每秒输出一次[time:working....],主线程每秒查询配置文件一次,只有当配置文件中的stop不等于No时,主线程才能执行 tokenSource.Cancel() 方法,Cancel方法会让异步任务停止。运行结果如下:

      代码比较简单,我们直接演示怎么在Centos上部署项目吧。

    2 使用nohup部署

        介绍这种部署放方式前,首先认识一下 nohup command & 命令。这条命令表示:不挂断地后台执行command,输出在当前目录的nohup.out 文件中(补充:如果当前目录的nohup.out文件不可写,那么输出在 $HOME/nohup.out 文件中)。nohub表示不挂断执行,&表示后台执行。下边我们看一下怎样使用nohub来部署我们的项目。

      首先发布项目,我习惯在windows上使用VS发布,然后通过文件上传工具(如FileZilla)上传到centos上。当然我们也可以使用  dotnet publish -o [somepath] -c release  命令在centos上发布。怎么把发布的文件传到Centos上就不细说了(推荐使用FlieZilla文件上传工具)。我们把发布的文件放在Centos的Apps/HelloWorld目录下,如下:

      然后执行 nohup dotnet HelloWorld.dll & 即可,非常简单。输出保存在nohup.out文件下,看一下执行效果:

      一个小细节:如果我们直接关闭Centos命令窗口可能会造成程序停止,尽量使用exit命令退出命令终端。

    3 使用supervisord部署

      使用supervisord进行netcore项目部署是一种比较主流的方式,我们先了解一下supervisord吧!

      Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的进程变为daemon(守护进程),并监控进程状态,异常退出时能自动重启了,被管理的进程被当作supervisor的子进程。supervisor可以控制这些子进程的开始,停止等。我们把一个进程交给supervisor管理时,可以给这个被管理的进程添加一个配置文件,用于设置这个进程是否自动启动、记录日志位置等。

    部署项目

      这里我们把发布文件放在Apps/HelloWorld2目录下。首先安装supervisor,安装命令如下:

    # yum install epel-release
    # yum install -y supervisor
    # systemctl enable supervisord  # 开机自启动
    # systemctl start supervisord   # 启动supervisord服务
    # systemctl status supervisord  # 查看supervisord服务状态

      安装supervisor完成后,我们给HelloWorld2项目添加一个配置文件,配置文件统一放在 /etc/supervisord.d 目录下,我们添加一个HelloWorld.ini配置文件,内容如下图:

       添加完配置文件后,使用 systemctl restart supervisord.service 命令重启supervisord服务,因为我们在上边的ini文件中设置的自动启动(autostart=true),所以我们的HelloWorld2项目会自动启动。我们可以通过supervisord来查看管理的进程状态,停止和启动进程等。我们也可以使用  supervisorctl stop/start all 来停止/启动管理的所有进程。

      总结:使用supervisord部署netcore应用十分简单:①添加一个xxx.ini配置文件  ②重启supervisord 即可。

    ini配置文件的具体配置可以参考supervisor官网,有一位园友的博客总结的很不错:进程管理supervisor的简单说明。有兴趣的小伙伴可以深入研究一下。

  • 相关阅读:
    SPOJ 10628 求树上的某条路径上第k小的点
    zoj 2112 动态区间求第k大
    SPOJ QTREE 树链剖分
    FZU 2082 过路费
    bzoj 1036 Tree Count
    POJ 3237
    C
    G
    E
    B. Split a Number(字符串加法)
  • 原文地址:https://www.cnblogs.com/wyy1234/p/10542815.html
Copyright © 2011-2022 走看看