netcore項目在Windows部署:使用NSSM部署Windows服務


NSSM部署Windows服務

1 准備工作

  在Windows平台部署Asp.net core應用程序一般采用IIS,但是如果我們的net core應用執行的是定時任務,需要開機自啟,穩定運行的話,使用NSSM將其部署為Winodows服務是一種不錯的選擇。NSSM官網地址:http://www.nssm.cc/

我們知道netcore應用本質都是Console應用程序,所以這里我們就以一個控制台應用為例演示NSSM部署過程。新建一個控制台項目,項目名為HelloWorld,代碼如下:

    class Program
    {
        static void Main(string[] args)
        {
            var tokenSource = new CancellationTokenSource();
            //業務,異步執行,每隔1秒輸出一次working
            Task.Factory.StartNew(() =>
            {
                while (!tokenSource.IsCancellationRequested)
                {
                    File.AppendAllTextAsync(@"F:\aaa.txt", $"{DateTime.Now.ToString("f")}:working...{Environment.NewLine}");
                    Thread.Sleep(1000);
                }
            }).ContinueWith(t =>
            {
                File.AppendAllText(@"F:\aaa.txt", $"{DateTime.Now.ToString("f")}:成功退出!");
                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();
        }
    }

  項目執行一個異步任務,每秒在F:/aaa.txt中寫入一行 【time:working....】,運行程序后,打開F:/aaa.txt文件,內容如下:

2  NSSM部署

1.發布項目

  我們可以使用VS發布項目,也可以使用PowerShell執行以下命令進行發布,發布后的文件存放在D:/Apps/HelloWorld目錄下

dotnet publish -o D:/Apps/HelloWorld -c release

2.使用NSSM

  下載NSSM,解壓后,進入nssm.exe所在目錄,在該目錄下打開PowerShell。我們通過 nssm install <SerivceName> 命令創建服務,執行命令后后彈出服務安裝窗口,如下圖:

Application Path:dotnet所在目錄,可以通過 where dotnet 命令查找;

Startup directroy:發布文件所在的目錄;

Arguments:發布項目后的xxx.dll文件名。

  點擊按鈕就可以創建服務了,使用十分簡單, 打開服務管理器,可以看到服務已經安裝成功了:

  myHelloWorld服務安裝成功后,並沒有啟動,我們可以使用服務管理器來啟動、停止服務,當然我們也可以使用nssm來來控制服務的啟動、停止、暫停等,常用命令如下:

nssm install <servicename>          //安裝服務
nssm remove <servicename>           //卸載服務
nssm start <servicename>            //啟動服務
nssm stop <servicename>             //停止服務
nssm restart <servicename>          //重啟服務
nssm status <servicename>           //查看服務
nssm pause <servicename>            //暫停服務
nssm continue <servicename>         //繼續服務

  我們執行 nssm start myHelloWorld 命令來啟動服務,查看F:/aaa.txt文件如下,可以看到服務運行正常。

3.服務修改

  項目總是不斷迭代的, 如果我們的myHelloWorld程序后期進行了修改,代碼如下,我們怎么去更新服務呢?

       static void Main(string[] args)
        {
            var tokenSource = new CancellationTokenSource();
            //業務,異步執行,每隔1秒輸出一次working
            Task.Factory.StartNew(() =>
            {
                while (!tokenSource.IsCancellationRequested)
                {
                    File.AppendAllTextAsync(@"F:\aaa.txt", $"{DateTime.Now.ToString("f")}:【修改了代碼】working...{Environment.NewLine}");
                    Thread.Sleep(1000);
                }
            }).ContinueWith(t =>
            {
                File.AppendAllText(@"F:\aaa.txt", $"{DateTime.Now.ToString("f")}:成功退出!");
                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();
        }
View Code

  更新服務十分方便:首先使用  nssm stop myHelloWorld 暫停服務,然后用新的發布文件替代以前的發布文件,之后使用 nssm start myHelloWorld 啟動服務即可。打開F:/aaa.txt,內容如下,可以看到重新發布已經生效了。

 

總結:雖然使用netcore后盡量應該把項目部署在Linux平台上,但是如果公司服務器是Windows Server,且項目要求開機自啟、長期穩定運行,使用nssm簡單方便地將項目部署為Windows服務也是一種不錯的選擇。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM