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

Linux Systemd Service无法启动.NET Core HelloWorld应用(code=exited, status=203/EXEC)

解决Systemd启动HelloWorld应用失败(status=203/EXEC)的问题

首先,错误代码203/EXEC是systemd的典型提示:它无法成功执行你指定的命令,通常和环境变量缺失或执行路径/依赖问题有关——虽然你手动运行没问题,但systemd服务的执行环境和你登录用户的会话环境是完全隔离的。

下面是具体的排查和解决步骤:

1. 确认发布产物的类型

先检查你发布到/srv/HelloWorld的文件:

ls -l /srv/HelloWorld
  • 如果看到的是HelloWorld.dll(非自包含发布):那你不能直接运行这个文件,需要用dotnet命令来启动,这是最可能的问题根源。
  • 如果看到的是可执行文件HelloWorld(自包含发布):那继续往下排查。

2. 修改Systemd服务文件的ExecStart命令

情况一:非自包含发布(需要dotnet运行时)

修改你的HelloWorld.service文件的[Service]段,把ExecStart改成用dotnet命令启动dll文件:

[Unit]
Description=Hello World console application
[Service]
ExecStart=/usr/bin/dotnet /srv/HelloWorld/HelloWorld.dll
SyslogIdentifier=HelloWorld
User=admin
[Install]
WantedBy=multi-user.target

先确认dotnet的绝对路径:执行which dotnet,如果输出不是/usr/bin/dotnet,替换成你得到的路径。

情况二:自包含发布(直接运行可执行文件)

如果是自包含发布,那大概率是systemd的环境变量里缺少必要的路径。可以在[Service]段添加环境变量配置:

[Unit]
Description=Hello World console application
[Service]
ExecStart=/srv/HelloWorld/HelloWorld
SyslogIdentifier=HelloWorld
User=admin
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/admin/.dotnet"
[Install]
WantedBy=multi-user.target

这里的PATH可以直接复制你登录用户的PATH(执行echo $PATH查看),确保包含.NET运行时相关路径。

3. 重新加载并重启服务

修改完服务文件后,执行以下命令生效:

sudo cp HelloWorld.service /etc/systemd/system/HelloWorld.service
sudo systemctl daemon-reload
sudo systemctl restart HelloWorld
sudo systemctl status HelloWorld

额外排查点

  • 检查可执行文件的权限:确保/srv/HelloWorld/HelloWorld有执行权限,执行chmod +x /srv/HelloWorld/HelloWorld(如果需要)。
  • 验证用户权限:用su - admin -c "/srv/HelloWorld/HelloWorld"测试,确认admin用户能正常运行该程序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:42:43