linux下systemd部署.net8 WebAPI服务后启动无返回状态

2025-07-16  乐帮网

.net linux

在 Linux 系统上使用 systemd 管理 .NET Web API 服务,启动sudo systemctl start vkt.api 无任何反馈,表现为命令行卡住,无输出信息。使用命令行查看状态systemctl status vkt.api.service
有以下内容

● vkt.api.service - Vkt API Service
     Loaded: loaded (/etc/systemd/system/vkt.api.service; disabled; preset: enabled)
     Active: activating (start) since Fri 2025-07-11 07:44:44 UTC; 30s ago
   Main PID: 40799 (dotnet)
      Tasks: 35 (limit: 4527)
     Memory: 170.8M (peak: 171.3M)
        CPU: 3.137s
     CGroup: /system.slice/vkt.api.service
             └─40799 dotnet /var/www/vkt.api/vkt.api.dll

原因分析
服务类型不匹配:.NET 应用需要明确告知 systemd 它已完全启动就绪
缺少就绪通知:默认配置下 systemd 不知道应用何时完成初始化
日志误判:应用可能已监听端口但未通知 systemd

解决方案
步骤 1:启用 .NET 的 systemd 集成,需要改程序的代码如下:
在项目中添加 systemd 集成包,使用Nuget 添加包引用 :Microsoft.Extensions.Hosting.Systemd
或者使用命令行:

dotnet add package Microsoft.Extensions.Hosting.Systemd

并修改 Program.cs 代码如下:

var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSystemd(); // 添加这行启用 systemd 集成

发布完成后再次使用sudo systemctl start vkt.api反馈如下:

[root@localhost xx]# sudo systemctl start vkt.api
[root@localhost xx]# sudo systemctl status vkt.api


● vkt.api.service - Vkt API Service
   Loaded: loaded (/etc/systemd/system/vkt.api.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2025-07-16 14:25:34 CST; 17s ago
 Main PID: 28689 (dotnet)
    Tasks: 25
   Memory: 117.8M
   CGroup: /system.slice/vkt.api.service
           └─28689 /usr/bin/dotnet /var/www/vkt.api/vkt.api.dll
 

公众号二维码

关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力