You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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()才退出执行后续日志。

修复步骤

  1. 移除ExecStart中的sudo
    修改systemd单元文件的[Service]段:
[Service]
ExecStart=/usr/bin/dotnet /opt/TrialCode/GrpcTestService/GrpcTestService.dll
WorkingDirectory=/opt/TrialCode/GrpcTestService
Type=notify
  1. 重新加载配置并重启服务
    执行命令:
systemctl daemon-reload
systemctl restart GrpcTest.service

额外验证项

  • 确认运行用户(默认root)对/opt/TrialCode/GrpcTestService目录有完整读写权限
  • 确保builder.Host.UseSystemd()在app.Build()之前调用(你的代码已正确配置)

内容的提问来源于stack exchange,提问作者Vikram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:46:09