.NET8应用作为systemd服务在Ubuntu启动超时问题求助
问题诊断与解决
核心问题:ExecStart中的sudo导致就绪通知无法传递
systemd服务默认以配置的用户(未指定时为root)运行,在ExecStart中添加sudo会生成额外的父进程(sudo进程),而systemd仅监控这个父进程。.NET应用调用UseSystemd()后会向父进程发送就绪通知,但此时父进程是sudo而非systemd,导致systemd始终收不到就绪信号,最终触发默认90秒的启动超时。
日志时间线也能佐证:Before Run..后恰好90秒出现After Run()..,说明systemd超时后杀死了sudo进程,连带终止了dotnet应用,app.Run()才退出执行后续日志。
修复步骤
- 移除
ExecStart中的sudo
修改systemd单元文件的[Service]段:
[Service] ExecStart=/usr/bin/dotnet /opt/TrialCode/GrpcTestService/GrpcTestService.dll WorkingDirectory=/opt/TrialCode/GrpcTestService Type=notify
- 重新加载配置并重启服务
执行命令:
systemctl daemon-reload systemctl restart GrpcTest.service
额外验证项
- 确认运行用户(默认root)对
/opt/TrialCode/GrpcTestService目录有完整读写权限 - 确保
builder.Host.UseSystemd()在app.Build()之前调用(你的代码已正确配置)
内容的提问来源于stack exchange,提问作者Vikram
相关产品推荐
相关产品推荐

