https://mp.weixin.qq.com/s/ongCPQ_nYFM4RuJsO7N0BA
一个应用需要常驻操作系统后台服务,可选框架有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
入口函数中写入:
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 跑起来。
按键 5 进入模拟运行,即是执行Worker等所有 IHostedService,方便开发调试。
安装服务
引入 NewLife.Extensions.Hosting.AgentService 后,应用本身直接启动时,是一个控制菜单,用于控制服务的安装卸载、启动和停止。控制菜单和服务属于两个进程。
按键 2 可以安装服务
这里失败了,因为安装卸载Windows服务需要管理员权限(Linux需要sudo)。在
TestWorker.exe
上点右键,“以管理员身份运行”。
按 3 即可启动服务,也可以在Windows服务中找到服务并启动。在 Linux 中,可以用
systemctl start TestWorker
启动服务。
至此,同时支持Windows和Linux的新一代服务主机示例完成。