.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平台
- 然后使用sc.exe工具来管理服务,输入一下命令创建为windows服务
sc.exe create DemoWorkService binPath=C:\WorkerPub\WorkerService1.exe
DemoWorkService 服务名称
C:\WorkerPub\WorkerService1.exe 生成的运行文件 - 查看服务状态使用一下命令
sc.exe query DemoWorkService
- 启动命令
sc.exe start DemoWorkService
linux平台
- 将运行文件设置权限 777
- 创建服务
# 进入目录
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
- 创建服务
systemctl enable myServices
- 启动服务
systemctl start myServices
[完]