本文内容
适用于:.NETCore2.1、.NETCore3.1、.NET5
本文介绍怎样配置ASP.NETCore应用程序,以确保应用程序在服务器重启后手动启动。
先决条件
若要根据本部份中的练习操作,必须在Linux中安装和布署ASP.NETCoreWeb应用程序。
还必须将NginxWeb服务器配置为反向代理redhat linux下载,便于将恳求从端口80路由到前端ASP.NETCore应用程序。
此部份的目标
本系列中的上一部份演示怎么将Nginx配置为反向代理,以及怎样排查HTTP502代理错误。HTTP502响应代码的缘由是,当Nginx尝试将流量转发到前端ASP.NETCore应用程序时,应用程序未运行。
通过自动运行ASP.NETCore应用程序,暂时解决了此问题。并且,假如应用程序崩溃如何办?还是必须重启服务器?每次自动重启ASP.NETCore应用程序不是实际的解决方案。为此,在本部份中,你将配置Linux以在应用程序崩溃后启动应用程序。
到目前为止,你已将Nginx和ASP.NETCore配置为协同工作。Nginx侦听端口80,并将恳求路由到侦听端口5000的ASP.NETCore应用程序。虽然Nginx手动启动,但每次重启服务器时,都必须自动启动ASP.NETCore应用程序。否则,ASP.NETCore应用程序将正常退出或崩溃。
假如通过将IIS用作代理来运行ASP.NETCore,则IISASP.NETCore模块(ANCM)处理进程管理,但是ASP.NETCore进程会手动启动。另一种选择是在Windows上将ASP.NETCore作为服务运行linux运行应用程序,便于在计算机启动后立刻配置手动启动功能。
为ASP.NETCore应用程序创建服务文件
回想一下,该systemctl命令用于管理“服务”或“守护程序”。守护程序的概念与Windows服务的概念类似。当系统启动时linux运行应用程序,可以手动重启这种服务。
哪些是服务文件?
在Linux中,还有具有“.service”扩展名的单元配置文件,用于在进程退出时控制守护程序的行为。那些文件称作为服务文件、单元文件和服务单元文件。
这种服务文件坐落以下目录之一:
检测Nginx服务文件。它通过包管理器安装。其配置文件应坐落/usr/lib/systemd/system/文件夹中。运行该systemctlstatusnginx命令就会显示服务文件的位置。
Nginx服务文件如下所示。
ASP.NETCore应用程序的示例服务文件
以下示例单元文件内容取自Linux上的主机ASP.NETCore和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
以下是此内容的一些关键方面:
注意
该www-data用户是系统中的特殊用户。可以使用此账户。你将创建一个新用户,用于在Linux中练习用户权限。并且,假如不想创建另一个Linux用户,则可以使用www-data它。
为ASP.NETCore应用程序创建服务文件
你将用于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
运行sudovi/etc/systemd/system/myfirstwebapp.service,粘贴最终配置并保存文件。
这会完成ASP.NETCoreWeb应用程序作为守护程序运行所需的配置。
因为Web应用程序如今配置为服务,因而可以通过运行systemctlstatusmyfirstwebapp.service来检测其状态。如以下屏幕截图中所示,应用程序已禁用(系统重启)后不会手动启动,但是当前未运行。
若要启动服务,请运行该sudosystemctlstartmyfirstwebapp.service命令linux系统,之后再度检测状态。这一次,应会听到服务正在运行,但是应在它后面列举进程ID。命令输出还显示新创建服务的系统日志中的最后几行,并显示服务正在侦:5000听。
假如Web应用程序意外停止,它将在10秒后手动重新启动。
最后一步是:服务正在运行但未启用。“已启用”表示它在服务器启动后手动启动。这是所需的最终配置。运行以下命令以确保已启用服务:
sudo systemctl enable myfirstwebapp.service
这是ASP.NETCore应用程序的一个里程碑,由于你已将其配置为在服务器重启或进程中止后手动启动。
测试ASP.NETCore应用程序是否手动重启
在转入下一部份之前,请确保一切按预期工作。当前配置如下所示
为此,每每ASP.NETCore服务停止时,应在10秒内重启。若要测试此行为,将强制进程停止。可以预计它会在10秒内重新启动。
注意
ASP.NETCore应用程序的当前进程ID。此处显示的尝试的进程ID为5084,在进程被中止之前。若要查找核心应用程序的进程ID,请运行该systemctlstatusmyfirstwebapp.service命令。
若要强制停止进程,请运行以下命令:
sudo kill -9
注意
9下边是讯号类型。按照man讯号命令,9是SIGKILL(中止讯号)。可以使用man“终止和讯号”命令打开帮助页,以了解有关本主题的详尽信息。
systemctlstatusmyfirstwebapp.service在命令后kill立刻运行该命令,等待大概10秒,之后再度运行同一命令。
在此屏幕截图中,可以看见以下信息:
假如尝试使用curllocalhost访问站点,应会听到ASP.NETCore应用程序仍在响应。
后续步骤
第2.3.1部份-[可选]在Linux上将ASP.NETCore应用程序配置为在其他用户下手动启动。