将 ASP.NET Core应用程序配置为自动启动

您所在的位置:网站首页 ubuntu开机自启 将 ASP.NET Core应用程序配置为自动启动

将 ASP.NET Core应用程序配置为自动启动

2023-09-25 03:39| 来源: 网络整理| 查看: 265

第 2.3 部分 - 将 ASP.NET Core应用程序配置为自动启动 项目 07/17/2023

适用于: .NET Core 2.1、.NET Core 3.1、.NET 5

本文介绍如何配置 ASP.NET Core应用程序,以确保应用程序在服务器重启后自动启动。

先决条件

若要按照本部分中的练习操作,必须在 Linux 中安装和部署 ASP.NET Core Web 应用程序。

还必须将 Nginx Web 服务器配置为反向代理,以便将请求从端口 80 路由到后端 ASP.NET Core应用程序。

此部分的目标

本系列中的上一部分演示如何将 Nginx 配置为反向代理,以及如何排查 HTTP 502 代理错误。 HTTP 502 响应代码的原因是,当 Nginx 尝试将流量转发到后端 ASP.NET Core应用程序时,应用程序未运行。

通过手动运行 ASP.NET Core应用程序,暂时解决了此问题。 但是,如果应用程序崩溃怎么办? 还是必须重启服务器? 每次手动重启 ASP.NET Core应用程序不是实际的解决方案。 因此,在本部分中,你将配置 Linux 以在应用程序崩溃后启动应用程序。

到目前为止,你已将 Nginx 和 ASP.NET Core 配置为协同工作。 Nginx 侦听端口 80,并将请求路由到侦听端口 5000 的 ASP.NET Core应用程序。 尽管 Nginx 自动启动,但每次重启服务器时,都必须手动启动 ASP.NET Core应用程序。 否则,ASP.NET Core应用程序将正常退出或崩溃。

如果通过将 IIS 用作代理来运行 ASP.NET Core,则 IIS ASP.NET Core 模块 (ANCM) 处理进程管理,并且 ASP.NET Core进程会自动启动。 另一种选择是在 Windows 中将 ASP.NET Core作为服务运行,以便在计算机启动后立即配置自动启动功能。

为 ASP.NET Core应用程序创建服务文件

回想一下,该 systemctl 命令用于管理“服务”或“守护程序”。 守护程序的概念与 Windows 服务的概念类似。 当系统启动时,可以自动重启此类服务。

什么是服务文件?

在 Linux 中,还有具有“.service”扩展名的单元配置文件,用于在进程退出时控制守护程序的行为。 这些文件也称为 服务文件、 单元文件和 服务单元文件。

这些服务文件位于以下目录之一:

/usr/lib/systemd/:存储已下载应用程序的服务文件 /etc/systemd/system/:存储由系统管理员创建的服务文件

检查 Nginx 服务文件。 它通过包管理器安装。 其配置文件应位于 /usr/lib/systemd/system/ 文件夹中。 运行该 systemctl status nginx 命令还会显示服务文件的位置。

Nginx 服务文件如下所示。

ASP.NET Core应用程序的示例服务文件

以下示例单元文件内容取自 Linux 上的主机 ASP.NET Core和 Nginx:

[Unit] Description=Example .NET Web API App running on Ubuntu [Service] WorkingDirectory=/var/www/helloapp ExecStart=/usr/bin/dotnet /var/www/helloapp/helloapp.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

以下是此内容的一些关键方面:

WorkingDirectory 是发布应用程序的目录。 ExecStart 是启动应用程序的实际命令。 Restart=always 是自言自明的。 如果由于某种原因(无论是手动还是由于崩溃)而停止,则始终会启动此过程。 RestartSec=10 也是自言自明的。 进程停止后,将在经过 10 秒后启动。 SyslogIdentifier 很重要。 它表示“系统日志标识符”。 有关守护程序的信息记录在此名称下的系统日志中。 还可以使用此标识符查找进程的 PID。 User 是管理服务的用户。 它应存在于系统中,并具有相应的应用程序文件所有权。 可以在服务文件中设置任意数量的环境变量。

注意

该 www-data 用户是系统中的特殊用户。 可以使用此帐户。 你将创建一个新用户,用于在 Linux 中练习用户权限。 但是,如果不想创建另一个 Linux 用户,则可以使用 www-data 它。

为 ASP.NET Core应用程序创建服务文件

你将用于 vi 创建和编辑服务文件。 服务文件将进入 /etc/systemd/system/ 文件夹。 请记住,在本系列中,你已将第一个应用程序发布到 /var/firstwebapp/ 文件夹。 因此, WorkingDirectory 应指向此文件夹。

下面是最终配置文件:

[Unit] Description=My very first ASP.NET Core applications running on Ubuntu [Service] WorkingDirectory=/var/firstwebapp/ ExecStart=/usr/bin/dotnet /var/firstwebapp/AspNetCoreDemo.dll Restart=always # Restart service after 10 seconds if the dotnet service crashes: RestartSec=10 KillSignal=SIGINT SyslogIdentifier=myfirstapp-identifier User=www-data Environment=ASPNETCORE_ENVIRONMENT=Development Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false [Install] WantedBy=multi-user.target

运行 sudo vi /etc/systemd/system/myfirstwebapp.service ,粘贴最终配置并保存文件。

这会完成 ASP.NET Core Web 应用程序作为守护程序运行所需的配置。

由于 Web 应用程序现在配置为服务,因此可以通过运行 systemctl status myfirstwebapp.service来检查其状态。 如以下屏幕截图中所示,应用程序已禁用 (系统重启) 后不会自动启动,并且当前未运行。

若要启动服务,请运行该 sudo systemctl start myfirstwebapp.service 命令,然后再次检查状态。 这一次,应会看到服务正在运行,并且应在它旁边列出进程 ID。 命令输出还显示新创建服务的系统日志中的最后几行,并显示服务正在侦 http://localhost:5000听。

如果 Web 应用程序意外停止,它将在 10 秒后自动重新启动。

最后一步是:服务正在运行但未启用。 “已启用”表示它在服务器启动后自动启动。 这是所需的最终配置。 运行以下命令以确保已启用服务:

sudo systemctl enable myfirstwebapp.service

这是 ASP.NET Core应用程序的一个里程碑,因为你已将其配置为在服务器重启或进程终止后自动启动。

测试 ASP.NET Core应用程序是否自动重启

在转到下一部分之前,请确保一切按预期工作。 当前配置如下所示

Nginx 会自动运行,并侦听在端口 80 上发送的请求。 Nginx 配置为反向代理,并将请求路由到 ASP.NET Core应用程序。 应用程序正在侦听端口 5000。 ASP.NET Core应用程序配置为在服务器重启后或进程停止或崩溃后自动启动。

因此,每当 ASP.NET Core服务停止时,应在 10 秒内重启。 若要测试此行为,将强制进程停止。 可以预计它会在 10 秒内重新启动。

注意

ASP.NET Core应用程序的当前进程 ID。 此处显示的尝试的进程 ID 为 5084 ,在进程被终止之前。 若要查找 ASP.net 核心应用程序的进程 ID,请运行该 systemctl status myfirstwebapp.service 命令。

若要强制停止进程,请运行以下命令:

sudo kill -9

注意

9 下面是信号类型。 根据 man 信号命令, 9 是 SIGKILL (终止信号) 。 可以使用 man “终止和信号”命令打开帮助页,以了解有关本主题的详细信息。

systemctl status myfirstwebapp.service在命令后kill立即运行该命令,等待大约 10 秒,然后再次运行同一命令。

在此屏幕截图中,可以看到以下信息:

在终止之前,ASP.NET Core进程的进程 ID 为 5084。 服务状态指示使用 PID 5084 的进程已终止,并且由于配置了自动重启而再次激活。 几秒钟后,PID 5181) (新进程启动。

如果尝试使用curl localhost访问站点,应会看到 ASP.NET Core应用程序仍在响应。

后续步骤

第 2.3.1 部分 - [可选] 在 Linux 中将 ASP.NET Core应用程序配置为在其他用户下自动启动。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3