asp.net systemd 服务在使用 .net 3.1 时卡住了
asp.net systemd service stuck using .net 3.1
我正在尝试设置 systemd 服务以在 raspberry pi 上托管网站。我安装了 ubuntu 20.04 并一直在尝试获取我的服务 运行 但发现它没有启动,因为它似乎找不到 aspnetcore 3.1 运行时。问题是,我不想使用 3.1 并且确实安装了 5.0。以下是我使用代码得到的消息:
journalctl -u BuildItWithDan.service
Mar 07 14:02:22 ubuntu systemd[1]: BuildItWithDan.service: Main process exited, code=exited, status=150/n/a
Mar 07 14:02:22 ubuntu systemd[1]: BuildItWithDan.service: Failed with result 'exit-code'.
Mar 07 14:02:33 ubuntu systemd[1]: BuildItWithDan.service: Scheduled restart job, restart counter is at 328.
Mar 07 14:02:33 ubuntu systemd[1]: Stopped Running ASP.NET Core on Ubuntu 20.04 Webserver APACHE.
Mar 07 14:02:33 ubuntu systemd[1]: Started Running ASP.NET Core on Ubuntu 20.04 Webserver APACHE.
Mar 07 14:02:33 ubuntu dotnet-example[7219]: It was not possible to find any compatible framework version
Mar 07 14:02:33 ubuntu dotnet-example[7219]: The framework 'Microsoft.AspNetCore.App', version '3.1.0' was not found.
Mar 07 14:02:33 ubuntu dotnet-example[7219]: - The following frameworks were found:
Mar 07 14:02:33 ubuntu dotnet-example[7219]: 5.0.3 at [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Mar 07 14:02:33 ubuntu dotnet-example[7219]: You can resolve the problem by installing the specified framework and/or SDK.
Mar 07 14:02:33 ubuntu dotnet-example[7219]: The specified framework can be found at:
Mar 07 14:02:33 ubuntu dotnet-example[7219]: - https://aka.ms/dotnet-core-applaunch framework=Microsoft.AspNetCore.App&framework_version=3.1.0&arch=arm64&rid=ubuntu.20.04-arm64
Mar 07 14:02:33 ubuntu systemd[1]: BuildItWithDan.service: Main process exited, code=exited, status=150/n/a
Mar 07 14:02:33 ubuntu systemd[1]: BuildItWithDan.service: Failed with result 'exit-code'.
这是我的服务代码:
[Unit]
Description=Running ASP.NET Core on Ubuntu 20.04 Webserver APACHE
[Service]
WorkingDirectory=/var/www/BuildItWithDan/
ExecStart=/usr/bin/dotnet /var/www/BuildItWithDan/BuildItWithDan.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
并安装了我的 dot-net 版本。
dotnet --info
.NET SDK (reflecting any global.json):
Version: 5.0.200
Commit: 70b3e65d53
Runtime Environment:
OS Name: ubuntu
OS Version: 20.04
OS Platform: Linux
RID: ubuntu.20.04-arm64
Base Path: /usr/share/dotnet/sdk/5.0.200/
Host (useful for support):
Version: 5.0.3
Commit: c636bbdc8a
.NET SDKs installed:
5.0.200 [/usr/share/dotnet/sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 5.0.3 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 5.0.3 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
To install additional .NET runtimes or SDKs:
https://aka.ms/dotnet-download
关于此服务为何不使用已安装的 .net 5 运行时的任何想法?
我猜您的应用程序是作为依赖于框架的应用程序部署的。这意味着它假定框架 ASP.NET Core 3.1.0 已经安装在目标机器上。您可以通过以下方式解决该问题:
- 正在安装 .NET Core 3 运行时(使用 ASP.NET 核心)
- 将应用程序发布为独立的(包含框架)
- 使用 .NET 5 作为目标平台发布应用程序并使其依赖于框架。
如果您有权访问源代码,则可以使用选项 2 和 3。
有关各种部署方法的更多详细信息,您可以在文档页面上找到:https://docs.microsoft.com/en-us/dotnet/core/deploying/
警告:我没有在干净的环境中尝试下面的方法,所以我不能 100% 确定它是否有效(在更改任何内容之前进行备份)。
您也可以使用某种方式 'hack' 并尝试编辑文件 [application_name].runtimeconfig.json
。它的内容如下:
{
"runtimeOptions": {
"tfm": "netcoreapp3.1",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "3.1.0"
}
}
}
你可以尝试改成:
{
"runtimeOptions": {
"tfm": "net5.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "5.0.0"
}
}
}
您还必须找到一个文件 [application_name].deps.json
并更改所有出现的内容:
.NETCoreApp,Version=v3.1
至:
.NETCoreApp,Version=v5.0
我找到了答案。
在我的服务中有这条线
ExecStart= /usr/bin/dotnet /var/www/BuildItWithDan/BuildItWithDan.dll
当它应该只是
ExecStart= dotnet /var/www/BuildItWithDan/BuildItWithDan.dll
基本上,调用 'dotnet' 而不是给它一个路径。愚蠢的错误。
我正在尝试设置 systemd 服务以在 raspberry pi 上托管网站。我安装了 ubuntu 20.04 并一直在尝试获取我的服务 运行 但发现它没有启动,因为它似乎找不到 aspnetcore 3.1 运行时。问题是,我不想使用 3.1 并且确实安装了 5.0。以下是我使用代码得到的消息:
journalctl -u BuildItWithDan.service
Mar 07 14:02:22 ubuntu systemd[1]: BuildItWithDan.service: Main process exited, code=exited, status=150/n/a
Mar 07 14:02:22 ubuntu systemd[1]: BuildItWithDan.service: Failed with result 'exit-code'.
Mar 07 14:02:33 ubuntu systemd[1]: BuildItWithDan.service: Scheduled restart job, restart counter is at 328.
Mar 07 14:02:33 ubuntu systemd[1]: Stopped Running ASP.NET Core on Ubuntu 20.04 Webserver APACHE.
Mar 07 14:02:33 ubuntu systemd[1]: Started Running ASP.NET Core on Ubuntu 20.04 Webserver APACHE.
Mar 07 14:02:33 ubuntu dotnet-example[7219]: It was not possible to find any compatible framework version
Mar 07 14:02:33 ubuntu dotnet-example[7219]: The framework 'Microsoft.AspNetCore.App', version '3.1.0' was not found.
Mar 07 14:02:33 ubuntu dotnet-example[7219]: - The following frameworks were found:
Mar 07 14:02:33 ubuntu dotnet-example[7219]: 5.0.3 at [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Mar 07 14:02:33 ubuntu dotnet-example[7219]: You can resolve the problem by installing the specified framework and/or SDK.
Mar 07 14:02:33 ubuntu dotnet-example[7219]: The specified framework can be found at:
Mar 07 14:02:33 ubuntu dotnet-example[7219]: - https://aka.ms/dotnet-core-applaunch framework=Microsoft.AspNetCore.App&framework_version=3.1.0&arch=arm64&rid=ubuntu.20.04-arm64
Mar 07 14:02:33 ubuntu systemd[1]: BuildItWithDan.service: Main process exited, code=exited, status=150/n/a
Mar 07 14:02:33 ubuntu systemd[1]: BuildItWithDan.service: Failed with result 'exit-code'.
这是我的服务代码:
[Unit]
Description=Running ASP.NET Core on Ubuntu 20.04 Webserver APACHE
[Service]
WorkingDirectory=/var/www/BuildItWithDan/
ExecStart=/usr/bin/dotnet /var/www/BuildItWithDan/BuildItWithDan.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target
并安装了我的 dot-net 版本。
dotnet --info
.NET SDK (reflecting any global.json):
Version: 5.0.200
Commit: 70b3e65d53
Runtime Environment:
OS Name: ubuntu
OS Version: 20.04
OS Platform: Linux
RID: ubuntu.20.04-arm64
Base Path: /usr/share/dotnet/sdk/5.0.200/
Host (useful for support):
Version: 5.0.3
Commit: c636bbdc8a
.NET SDKs installed:
5.0.200 [/usr/share/dotnet/sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 5.0.3 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 5.0.3 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
To install additional .NET runtimes or SDKs:
https://aka.ms/dotnet-download
关于此服务为何不使用已安装的 .net 5 运行时的任何想法?
我猜您的应用程序是作为依赖于框架的应用程序部署的。这意味着它假定框架 ASP.NET Core 3.1.0 已经安装在目标机器上。您可以通过以下方式解决该问题:
- 正在安装 .NET Core 3 运行时(使用 ASP.NET 核心)
- 将应用程序发布为独立的(包含框架)
- 使用 .NET 5 作为目标平台发布应用程序并使其依赖于框架。
如果您有权访问源代码,则可以使用选项 2 和 3。
有关各种部署方法的更多详细信息,您可以在文档页面上找到:https://docs.microsoft.com/en-us/dotnet/core/deploying/
警告:我没有在干净的环境中尝试下面的方法,所以我不能 100% 确定它是否有效(在更改任何内容之前进行备份)。
您也可以使用某种方式 'hack' 并尝试编辑文件 [application_name].runtimeconfig.json
。它的内容如下:
{
"runtimeOptions": {
"tfm": "netcoreapp3.1",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "3.1.0"
}
}
}
你可以尝试改成:
{
"runtimeOptions": {
"tfm": "net5.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "5.0.0"
}
}
}
您还必须找到一个文件 [application_name].deps.json
并更改所有出现的内容:
.NETCoreApp,Version=v3.1
至:
.NETCoreApp,Version=v5.0
我找到了答案。
在我的服务中有这条线
ExecStart= /usr/bin/dotnet /var/www/BuildItWithDan/BuildItWithDan.dll
当它应该只是
ExecStart= dotnet /var/www/BuildItWithDan/BuildItWithDan.dll
基本上,调用 'dotnet' 而不是给它一个路径。愚蠢的错误。