支持多种操作系统的新一代服务主机

介绍NewLife.Agent如何简化创建同时支持Windows和Linux的服务主机过程。通过简单的配置即可实现服务的安装、卸载及运行。

一个应用需要常驻操作系统后台服务,可选框架有WindowsServiceLifeTime和SystemdLifeTime,但需要区别对待不同操作系统且需要另外写命令安装。NewLife.Agent自2008年设计以来,一直秉着简单易用的原则,不仅实现了服务框架,还实现了安装卸载的简易菜单。今天,我们让NewLife.Agent实现IHostLifeTime,成为同时支持Windows和Linux的新一代服务主机!

开源项目:https://github.com/NewLifeX/NewLife.Agent

Nuget:NewLife.Extensions.Hosting.AgentService

快速入门

新建WorkerService服务项目,从Nuget引入 NewLife.Extensions.Hosting.AgentService 。87bb9b5d5afb2eac2c2a0265d1b47d67.png

20b73796dadca9ae68ee48fa2526fbd5.png

入口函数中写入:

using NewLife.Extensions.Hosting.AgentService;
using TestWorker;


IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        services.AddHostedService<Worker>();
    })
    .UseAgentService(options =>
    {
        options.ServiceName = "TestWorker";
        options.DisplayName = "Worker服务测试";
        options.Description = "Worker服务的测试应用";
    })
    .Build();


await host.RunAsync();

Woker类中写入

using NewLife.Log;


namespace TestWorker
{
    public class Worker : BackgroundService
    {
        private readonly ILog _logger;


        public Worker(ILog logger)
        {
            _logger = logger;
        }


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


        public override Task StartAsync(CancellationToken cancellationToken)
        {
            XTrace.WriteLine(nameof(StartAsync));


            return base.StartAsync(cancellationToken);
        }


        public override Task StopAsync(CancellationToken cancellationToken)
        {
            XTrace.WriteLine(nameof(StopAsync));


            return base.StopAsync(cancellationToken);
        }
    }
}

双击 TestWorker.exe 跑起来,也可以 dotnet TestWorker.dll 跑起来。

d8b509ad4c469b0b9df02c5c9241d9ec.png

按键 5 进入模拟运行,即是执行Worker等所有 IHostedService,方便开发调试。

cd2613fba2afd61e73bb94778764954c.png

安装服务

引入 NewLife.Extensions.Hosting.AgentService 后,应用本身直接启动时,是一个控制菜单,用于控制服务的安装卸载、启动和停止。控制菜单和服务属于两个进程。

按键 2 可以安装服务

dd98dc48060f2fdb9daa64d3e39c868a.png

这里失败了,因为安装卸载Windows服务需要管理员权限(Linux需要sudo)。在 TestWorker.exe 上点右键,“以管理员身份运行”。

按 3 即可启动服务,也可以在Windows服务中找到服务并启动。在 Linux 中,可以用 systemctl start TestWorker 启动服务。

33ed40f64d80e8a6f1177721dfab9b7c.png

至此,同时支持Windows和Linux的新一代服务主机示例完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值