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

Ubuntu下Systemd托管ASP.Net Core 3.1 API配置键值为NULL问题

解决Systemd托管ASP.NET Core 3.1 API无法读取appsettings.json的问题

我之前部署ASP.NET Core服务时也碰到过一模一样的情况——命令行直接跑完全正常,用Systemd托管就读不到配置值,大概率是下面几个原因导致的,咱们一步步排查解决:

1. 最常见的坑:Systemd服务未设置正确的工作目录

Systemd默认的工作目录是根目录/,而你的appsettings.json明明放在发布文件夹里。当服务启动时,程序会在/下去找配置文件,自然找不到,所以读取的配置键值全是null。

解决办法:
编辑你的/etc/systemd/system/mytest.service文件,添加WorkingDirectory配置项,指向API发布文件夹的绝对路径,示例如下:

[Unit]
Description=My Test ASP.NET Core API

[Service]
WorkingDirectory=/var/www/mytest  # 替换成你的实际发布文件夹路径
ExecStart=/var/www/mytest/YourApiExecutableName  # 同样用绝对路径指向可执行文件
Restart=always
# 若需要指定运行用户,可加上User=www-data(根据实际场景调整)

[Install]
WantedBy=multi-user.target

修改完成后,重载Systemd并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart mytest.service

2. 权限问题:Systemd运行用户无配置文件读取权限

如果你的发布文件夹或appsettings.json的权限设置不合理,Systemd使用的运行用户(默认是root,未指定的话)可能没有读取文件的权限,也会导致配置读取失败。

解决办法:

  • 先查看文件权限情况:
ls -l /var/www/mytest/appsettings.json
  • 如果权限不足,可将发布文件夹的所有权转给运行用户(比如常用的www-data):
sudo chown -R www-data:www-data /var/www/mytest
  • 或者直接调整配置文件的可读权限:
sudo chmod 644 /var/www/mytest/appsettings.json

3. 发布时配置文件未被包含到输出目录

有时候可能因为项目中appsettings.json的复制属性没设置对,导致发布时没有把配置文件打包到输出文件夹里。

解决办法:

  • 回到本地项目中,右键appsettings.json文件,选择「属性」,将「复制到输出目录」设置为「如果较新则复制」或「始终复制」。
  • 重新执行发布命令:
dotnet publish -c Release -r linux-x64 --self-contained
  • 发布完成后,检查Ubuntu上的发布文件夹,确认appsettings.json存在。如果缺失,手动将本地的配置文件复制到Ubuntu的发布目录中。

4. 验证排查:查看Systemd服务日志

如果上面的方法都没解决问题,可以查看服务的实时日志,获取具体的错误提示:

journalctl -u mytest.service -f

日志里如果出现类似“找不到appsettings.json”的错误,就能直接对应到工作目录或文件缺失的问题。

内容的提问来源于stack exchange,提问作者J.Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:53:01