ASP.NET Core RC2 作为 Linux 守护进程

2024-02-22

我需要有关作为 Linux 守护进程托管 NET Core 控制台或 ASP.NET 应用程序的信息。 Microsoft.Hosting.WindowsService 已经支持将应用程序托管为 Windows 服务,但我需要类似的 Linux 守护程序。


我在 RHEL 上运行,因此选择编写我自己的 systemd 单元文件。下面是我与 PostgreSQL 结合使用的一个示例(因此是环境变量)。出于显而易见的原因,我删除了敏感信息。

[Unit]  
Description=My Sample Application  
Documentation=  


Wants=network.target  
After=network.target  


[Service]  
User=dotnetuser  
Group=dotnetuser  
Nice=5  
KillMode=control-group  
SuccessExitStatus=0 1  
Environment=MY_CONNSTRING=Server=localhost;Username=myUser;Password=myPass;Database=myDatabase  


NoNewPrivileges=true  
PrivateTmp=true  
InaccessibleDirectories=/sys /srv -/opt /media -/lost+found  
ReadWriteDirectories=/var/www/myapp  
WorkingDirectory=/var/www/myapp  
ExecStart=/opt/dotnet/dotnet run  


[Install]  
WantedBy=multi-user.target  

该文件进入/etc/systemd/system目录,并以您想要的任何名称命名服务,并在其后添加“.service”。例如,完整路径可能是/etc/systemd/system/aspnet-example.service.

然后您可以使用以下命令启动和停止服务systemctl start aspnet-example and systemctl stop aspnet-example.

要将服务设置为开机启动:systemctl enable aspnet-example

配置文件中主要需要指出的是:

  • 用户和组不应该是 root。我建议创建一个新用户来运行您的应用程序。

  • 设置 KillMode=control-group 以便将 SIGTERM 发送到运行该服务的所有 dotnet 进程。

  • 读写目录和工作目录指向 Web 应用程序的根目录。我用过/var/www/myapp举个例子。

  • ExecStart 必须是 dotnet 二进制文件的绝对路径。 Systemd 不支持相对路径。

编辑:我忘记提及的一件事是,我通常在应用程序前面运行 nginx 作为反向代理。我提供了一个链接,其中包含有关发布到 Linux 生产服务器的更多信息。

https://docs.asp.net/en/latest/publishing/linuxproduct.html https://docs.asp.net/en/latest/publishing/linuxproduction.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Core RC2 作为 Linux 守护进程 的相关文章

随机推荐