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
庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。
如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力