linux - Linux 上的 .Net Core 在 'dotnet myapp.dll' 下运行良好,但在 systemctl 下失败

标签 linux ubuntu asp.net-core .net-core

我正在尝试按照 this tutorial 中的说明在 Ubuntu Server 16.04 LTS 上托管 ASP.Net Core MVC 应用程序.

在 Linux 计算机上,我使用 git pull 来拉入我的项目。我使用 dotnet build 成功构建了它,这会触发包恢复。我使用 dotnetpublish -c Release -r linux-x64 成功发布了它。我将目录更改为 bin/Release/netcoreapp2.1 并运行 sudo cp ./*.*/var/aspnetcore/myapp/ 将文件复制到我所在的目录中我正在主持该项目。我导航到该目录并输入 dotnet myapp.dll - 该应用程序开始监听端口 5000 和 5001,并且从另一台计算机上,我可以在浏览器中输入我的域名并查看该网站,这意味着 Nginx 反向代理和 Kestrel 必须工作正常。

现在我想将应用程序作为服务运行,以便它随计算机启动,在崩溃时重新启动,记录错误等,但是当我输入 sudo systemctl start kestrel-myapp.service 时,它立即崩溃并尝试每 10 秒重新启动一次但失败。日志显示错误:未找到应用程序依赖项 list (myapp.deps.json) 中的程序集:包:'Microsoft.EntityFrameworkCore.Relational.Design',版本'1.1.5'路径:'lib/netstandard1.3/Microsoft.EntityFrameworkCore.Relational.Design.dll'主进程退出,code=exited,status=140/n/a

所以,1.1.5 版本看起来低得可疑,但我更新了所有 NuGet 包,它仍然想使用它。另外,我不明白为什么如果依赖项存在问题,它不会因 dotnet myapp.dll 崩溃。有人知道如何解决这个问题吗?

这是我的服务文件:

[Unit]
Description=myapp ASP.Net Core MVC Application

[Service]
WorkingDirectory=/var/aspnetcore/myapp
ExecStart=/usr/bin/dotnet /var/aspnetcore/myapp/myapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
SyslogIdentifier=myapp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

额外问题:我应该将带有静态文件的 wwwroot 文件夹复制到哪里?应用程序运行,但找不到我的任何 javascript 或 css 文件,并且我不确定它们属于哪里。

最佳答案

当您dotnetpublish -c Release -r linux-x64时,它会创建几个目录。您想要使用 bin/Release/netcoreapp2.1/linux-x64/publish 目录。其他目录也包含构建,但这些构建假设它们将在开发系统上运行。只有 publish 目录包含应部署的位。其他目录包含假设它们在开发环境中运行的位。

当您运行 dotnet myapp.dll 时,它会起作用,因为您仍然以普通用户身份运行,并且它会看到您的本地开发 Assets ,包括 nuget 缓存。

当您通过systemctl运行时,它以root身份运行,它没有任何本地nuget缓存,并且无法使用开发(非published) 代码版本。

关于linux - Linux 上的 .Net Core 在 'dotnet myapp.dll' 下运行良好,但在 systemctl 下失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52281480/

相关文章:

c++ - 辅助库可以用于在不相关的进程(不是 fork 进程)之间共享接受的连接吗?

c - 系统命令在 C 程序中挂起,但是当我在 bash 上运行命令时它成功了

python - 我应该使用哪个 Enthought EPD 发行版?

javascript - knockout 映射 c# 模型到 knockout 模型,将 C# 代码解析为 json 不起作用

c# - 如何使用 .NET Core 依赖注入(inject)在运行时解析服务和注入(inject)额外的构造函数参数?

javascript - asp core 和 angular7 中没有 'Access-Control-Allow-Origin' header

c++ - 如何在 C++ 中从控制台读取整数而不添加换行符?

ubuntu - 将 kubernetes 内部网络扩展到仅 Master 节点

ubuntu - 在哪里可以找到 ubuntu 16.04 中可用的配色方案?

ubuntu - 重建一个没有一些补丁的 ubuntu/debian 包