个人未完成的网站

.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

[完]

posted on 2019-12-10 15:57  我是小虫  阅读(1222)  评论(0编辑  收藏  举报

导航