天天看點

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方法會讓異步任務停止。運作結果如下:

netcore項目在Centos部署:nohup和supervisor方式

  代碼比較簡單,我們直接示範怎麼在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目錄下,如下:

netcore項目在Centos部署:nohup和supervisor方式

  然後執行 nohup dotnet HelloWorld.dll & 即可,非常簡單。輸出儲存在nohup.out檔案下,看一下執行效果:

netcore項目在Centos部署:nohup和supervisor方式

  一個小細節:如果我們直接關閉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配置檔案,内容如下圖:

netcore項目在Centos部署:nohup和supervisor方式

   添加完配置檔案後,使用 systemctl restart supervisord.service 指令重新開機supervisord服務,因為我們在上邊的ini檔案中設定的自動啟動(autostart=true),是以我們的HelloWorld2項目會自動啟動。我們可以通過supervisord來檢視管理的程序狀态,停止和啟動程序等。我們也可以使用  supervisorctl stop/start all 來停止/啟動管理的所有程序。

netcore項目在Centos部署:nohup和supervisor方式

  總結:使用supervisord部署netcore應用十分簡單:①添加一個xxx.ini配置檔案  ②重新開機supervisord 即可。

ini配置檔案的具體配置可以參考supervisor官網,有一位園友的部落格總結的很不錯:程序管理supervisor的簡單說明。有興趣的小夥伴可以深入研究一下。

作者:撈月亮的猴子

    出處:https://www.cnblogs.com/wyy1234/

    歡迎轉載,但請标明出處。如果本文對您有些許幫助,點選一下推薦吧,Thanks♪(・ω・)ノ