ServiceSelf提供Windows或Linux服务

ServiceSelf提供Windows或Linux服务

因为.net 已经内置了Kestrel服务器,很多时候我们直接采用Kestrel作为服务器即可。但是在windows下,点击.net项目会运行cmd窗口,关闭cmd窗口则.net项目也随之关闭,这时候就需要将.net项目作为服务运行在系统中,或者在linux下作为守护进程运行在系统中。在 Windows 上快速部署.NET Core Web 项目这篇文章已经讲了使用WinSW或者NSSM将.net作为服务来使用,今天讲解一种更简单的方法,使用ServiceSelf框架。

ServiceSelf为.NET 泛型主机的应用程序提供自安装为服务进程的能力,支持windows和linux平台,支持:

  • 自我服务安装
  • 自我服务卸载
  • 自我服务日志监听

使用方式

  1. 引入nuget包ServiceSelf

​ 2. 使用非常简单,两个管件步骤,在创建Host之前调用Service.UseServiceSelf(args),并为Host配置UseServiceSelf()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static void Main(string[] args)
{
// 创建Host之前调用Service.UseServiceSelf(args)
if (Service.UseServiceSelf(args))
{
var builder = WebApplication.CreateBuilder(args);

// 为Host配置UseServiceSelf()
builder.Host.UseServiceSelf();

var app = builder.Build();
app.MapGet("/", context => context.Response.WriteAsync("ServiceSelf"));
app.Run();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public static void Main(string[] args)
{
var service = "mydotnetservice";
var serviceOptions = new ServiceOptions()
{
Arguments = new[] { new Argument("key", "value") },
Description = "My Dotnet Service"
};
serviceOptions.Windows.DisplayName = "My Dotnet Service";
serviceOptions.Windows.FailureActionType = WindowsServiceActionType.Restart;
serviceOptions.Linux.Service.Restart = "always";
serviceOptions.Linux.Service.RestartSec = "10";

if (!Service.UseServiceSelf(args, service, serviceOptions))
return;

var builder = WebApplication.CreateBuilder(args);
builder.Host.UseServiceSelf();

var app = builder.Build();
app.Logger.LogInformation("Service is running");
app.MapGet("/", () => { app.Logger.LogInformation("返回请求"); return "Hello World!"; });

app.Run();
}
  1. 服务控制

必须使用root或者管理员模式

  • windows下
1
2
3
4
yourapp.exe start // 安装并启动服务
yourapp.exe stop // 停止并删除服务
yourapp.exe logs // 控制台输出服务的日志
yourapp.exe logs filter="key words" // 控制台输出服务的日志

  • Linux下
1
2
3
4
sudo ./yourapp start // 安装并启动服务
sudo ./yourapp stop // 停止并删除服务
sudo ./yourapp logs // 控制台输出服务的日志
sudo ./yourapp logs filter="key words" // 控制台输出服务的日志
作者

步步为营

发布于

2025-04-21

更新于

2025-04-21

许可协议