ASP.NET 核心 RC2 作为 linux 守护进程

ASP.NET Core RC2 as linux deamon

我需要有关托管网络核心控制台或 asp.net 应用程序作为 linux 守护程序的信息。 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-examplesystemctl stop aspnet-example 启动和停止服务。

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

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

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

  • KillMode=control-group 已设置,以便将 SIGTERM 发送到服务为 运行.

  • 的所有 dotnet 进程
  • ReadWriteDirectory 和 WorkingDirectory 指向您的 Web 应用程序的根目录。我以 /var/www/myapp 为例。

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

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

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