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

.NET location: Not found:树莓派Zero 2上.NET 8服务启动失败

问题描述

树莓派Zero 2(Debian系统)上,原基于.NET Core 6开发的Web应用通过自定义systemd服务以root用户运行正常数月。升级至.NET Core 8并更新系统.NET环境后,出现两个问题:

  • 通过systemd服务启动时,提示.NET location: Not found错误
  • 直接在应用目录运行可执行文件:不加sudo正常启动,加sudo则报错

当前systemd服务配置如下:

[Unit]
Description=RealiseMotion Loader
 
[Service]
Type=oneshot
User=root
Group=root
WorkingDirectory=/usr/local/bin/RealiseMotion/web/
ExecStart=/usr/local/bin/RealiseMotion/web/RealiseMotion.Client 10001
#WorkingDirectory=/usr/local/bin/RealiseMotion/Loader/
#ExecStart=/usr/local/bin/RealiseMotion/Loader/RealiseMotion.Loader

[Install]
WantedBy=multi-user.target

解决方案

1. 修复root用户的.NET环境变量

普通用户能正常运行是因为.NET路径已加入其环境变量,但root用户(包括sudo和systemd服务)的环境变量未包含该路径。

  • 先获取普通用户的.NET路径:

    echo $PATH
    

    找到包含.dotnet的路径,通常为/usr/share/dotnet或$HOME/.dotnet

  • 为root用户添加环境变量:
    编辑root的配置文件:

    sudo nano /root/.bashrc
    

    在末尾添加:

    export PATH=$PATH:/usr/share/dotnet  # 替换为你实际找到的.NET路径
    export DOTNET_ROOT=/usr/share/dotnet
    

    保存退出后生效配置:

    source /root/.bashrc
    

2. 为systemd服务显式配置环境变量

systemd默认不会继承用户的完整环境变量,需在服务配置中直接指定:

修改服务配置文件(通常位于/etc/systemd/system/[你的服务名].service):

[Service]
# 保留原有配置,新增以下两行
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/share/dotnet"
Environment="DOTNET_ROOT=/usr/share/dotnet"

更新配置并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart RealiseMotion.Loader.service

3. 验证root环境下的.NET可用性

执行以下命令确认root能正常识别.NET:

sudo dotnet --version

若仍报错,用普通用户执行which dotnet获取准确的.NET安装路径,再重复上述步骤修正。

额外优化(可选)

如果你的Web应用是长期运行的服务,建议将服务配置中的Type=oneshot改为Type=simple,并添加自动重启规则:

[Service]
Type=simple
Restart=always

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:55:05