Linux上的.Net Core与'dotnet myapp.dll'可以正常运行,但与systemctl一起运行失败

时间:2018-09-11 17:43:13

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

我试图按照this tutorial中的指示在Ubuntu Server 16.04 LTS上托管ASP.Net Core MVC应用程序。

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

现在,我想将应用程序作为服务运行,以便它从计算机启动,崩溃时重新启动,记录错误等,但是当我键入sudo systemctl start kestrel-myapp.service时,它立即崩溃并尝试每10秒重新启动一次,但是失败。日志显示错误:An assembly in the application dependencies manifest (myapp.deps.json) was not found: package: 'Microsoft.EntityFrameworkCore.Relational.Design', version '1.1.5' path: 'lib/netstandard1.3/Microsoft.EntityFrameworkCore.Relational.Design.dll' Main process exited, code=exited, status=140/n/a

因此,版本1.1.5看起来低得可疑,但是我更新了所有的Nu​​Get软件包,但它仍然想要使用它。另外,如果依赖项存在问题,我不明白为什么它不会与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文件,而且我不确定它们属于哪里。

2 个答案:

答案 0 :(得分:1)

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

它在您运行dotnet myapp.dll时有效,因为您仍以常规用户身份运行,并且可以看到您的本地开发资产,包括nuget缓存。

通过systemctl运行时,它以root运行,它没有任何本地nuget缓存,并且无法使用代码的开发(非publish ed版本)版本

答案 1 :(得分:0)

确保将 WorkingDirectory 设置为运行时 dll 文件所在的目录。