.net 部署为windows服务 linux服务

安装nuget

Install-Package Microsoft.Extensions.Hosting.WindowsServices
Install-Package Microsoft.Extensions.Hosting.Systemd

.net5

调整CreateHostBuilder

public static IHostBuilder CreateHostBuilder(string[] args)
        {
            IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args)
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder
                   .UseUrls($"http://{ip}:{port}")
                   .UseStartup<Startup>()
                   ;
                });

            if (System.OperatingSystem.IsWindows())
            {
                hostBuilder.UseWindowsService();
            }
            if (System.OperatingSystem.IsLinux())
            {
                hostBuilder.UseSystemd();
            }
            return hostBuilder;
        }

windows服务使用sc命令注册
linux服务使用systemd注册-使用systemctl管理

如果需要依赖其他服务才能启动,可以配置服务依赖
windows下

sc config ServiceA depend= "BaseService"
# 重新设置为空字符串即可清空依赖属性

.net7

调整为以下代码

var builder = WebApplication.CreateBuilder(args);

if (System.OperatingSystem.IsWindows())
{
    builder.Host.UseWindowsService();
}

if (System.OperatingSystem.IsLinux())
{
    builder.Host.UseSystemd();
}


var app = builder.Build();

另外需要注意在linux下使用systemctl管理服务时不要配置Type=forking

[参考]
systemd.service

posted @ 2022-05-24 10:52  Hey,Coder!  阅读(330)  评论(0编辑  收藏  举报