.netcore worker service (輔助角色服務) 的上手入門,包含linux和windows服務部署

worker service (輔助角色服務)

環境

  • vs2019
  • .netcore3.0

操作

  • 新建一個項目 如下圖
    在這裏插入圖片描述

  • 添加nuget

    • Microsoft.Extensions.Hosting.WindowsServices(windows平臺下的服務)
    • Microsoft.Extensions.Hosting.Systemd(linux平臺下的服務)
      根據自己需要選擇添加,也可以都添加(我的都添加了,在程序裏面判斷了平臺)
  • 判斷平臺注入服務

 public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args)
        {
        	//是否是windows平臺
            bool isWinPlantform = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
            Console.WriteLine($"Window Plantform:{isWinPlantform}");
            if (isWinPlantform)
                return Host.CreateDefaultBuilder(args)
                    .UseSystemd()//使用linux服務
                    .ConfigureServices((hostContext, services) =>
                    {
                        services.AddHostedService<Worker>();
                    });
            return Host.CreateDefaultBuilder(args)
                .UseWindowsService()//使用windows服務
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<Worker>();
                });
        }
    }

簡要介紹

Program 類
包含了程序入庫 main函數。在函數內注入了Worker服務
在2.x版本中沒有worker服務,可以在asp.net的startup中注入服務

Worker類
繼承BackgroundService類,重寫ExecuteAsync方法即可(2.x版本中也是這樣實現的

 public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;

        public Worker(ILogger<Worker> logger)
        {
            _logger = logger;
        }

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                await Task.Delay(1000, stoppingToken);
            }
        }
    }

創建服務並且運行

windows平臺

  1. 然後使用sc.exe工具來管理服務,輸入一下命令創建爲windows服務
    sc.exe create DemoWorkService binPath=C:\WorkerPub\WorkerService1.exe
    DemoWorkService 服務名稱
    C:\WorkerPub\WorkerService1.exe 生成的運行文件
  2. 查看服務狀態使用一下命令
    sc.exe query DemoWorkService
  3. 啓動命令
    sc.exe start DemoWorkService

linux平臺

  1. 將運行文件設置權限 777
  2. 創建服務
# 進入目錄
cd /lib/systemd/system

# 創建文件
sudo tocuh myServices.service

#編輯文件
sudo nano myServices.service

文件內容

[Unit]
Description=myServices
After=network-online.target
 
[Service]
Type=simple
User=root
#工作路徑(根據你的需要填寫)
WorkingDirectory=/home/pi/api
#啓動程序
ExecStart=/home/pi/api/WorkerService
Restart=always
 
[Install]
WantedBy=multi-user.target
  1. 創建服務
    systemctl enable myServices
  2. 啓動服務
    systemctl start myServices

[完]

發佈了53 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章