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

Ubuntu+Apache部署ASP.NET Core服务报code=exited,status=150错误

错误原因

ASP.NET Core应用在systemd下返回status=150退出码,是进程启动阶段触发未捕获运行时异常直接终止导致的,结合给出的配置和Ubuntu+Apache反向代理的部署场景,常见诱因如下:

  • service配置未显式指定应用监听地址,systemd运行环境不继承交互式shell的默认环境变量,易出现端口绑定失败问题
  • 服务器未安装与应用编译版本匹配的ASP.NET Core运行时,仅安装了.NET基础运行时或SDK版本不匹配
  • 应用目录、文件权限配置错误,进程无法读取dll、配置文件,或没有日志、临时文件的写入权限
  • 现有service配置标注为CentOS 7环境,实际运行在Ubuntu上,启动用户、服务依赖顺序等参数不兼容
  • 应用本身存在启动阶段报错(如数据库连接失败、配置文件缺失、依赖项找不到),systemd默认配置未捕获到具体错误输出
修复步骤

按以下顺序排查调整即可:

1. 手动运行应用定位根因

先切换到应用目录,用和service配置完全一致的命令手动启动,可直接看到具体报错,避免盲目改配置:

cd /var/www/serije
/usr/bin/dotnet Serije.dll
  • 如果手动运行可以正常启动,问题完全出在systemd配置上,按后续步骤调整即可
  • 如果手动运行直接报错,根据输出对应修复:
    • 提示找不到匹配版本的dotnet运行时:安装和项目编译版本一致的ASP.NET Core运行时包
    • 提示文件格式无法识别:发布时未指定linux-x64运行时标识,重新发布Linux版本的部署包
    • 提示配置缺失、数据库连接失败等业务类错误:对应补全配置、调整网络/权限即可

2. 修正systemd服务配置

替换原有.service文件内容为适配Ubuntu环境的配置,示例如下(文件路径一般为/etc/systemd/system/app.service,和你之前的文件命名保持一致即可):

[Unit]
Description=ASP.NET Core App running on Ubuntu
After=network.target apache2.service
Requires=apache2.service

[Service]
WorkingDirectory=/var/www/serije
ExecStart=/usr/bin/dotnet /var/www/serije/Serije.dll --urls "http://127.0.0.1:5000"
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-serije
User=www-data
Group=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

配置调整点说明:

  • 启动用户从root改为Ubuntu下Apache默认的运行用户www-data,避免root权限带来的安全风险和文件权限冲突
  • 显式添加--urls参数指定应用监听127.0.0.1:5000,仅对本地Apache代理暴露端口,避免默认绑定地址/端口随机导致的代理失败
  • 添加After和Requires配置,保证网络、Apache服务就绪后再启动应用,解决启动顺序导致的依赖问题
  • 配置标准输出、错误输出到journald,后续排查日志无需额外找文件

3. 修复应用目录权限

给应用目录配置正确的归属和权限,保证www-data用户可正常读写:

chown -R www-data:www-data /var/www/serije
chmod -R 755 /var/www/serije

4. 重载配置启动服务

依次执行以下命令重载systemd规则、启动服务并设置开机自启:

systemctl daemon-reload
systemctl enable app.service
systemctl start app.service

启动后执行systemctl status app.service查看运行状态,如果仍启动失败,执行journalctl -u app.service -f查看实时日志,即可定位到具体错误点。

补充说明

如果应用采用独立部署模式发布,不依赖系统预装的dotnet运行时,ExecStart字段直接填写发布包内的Serije可执行文件路径即可,不需要加/usr/bin/dotnet前缀,同时要给该可执行文件添加执行权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:01:14