您的位置:首页 > 运维架构 > Linux

用C#编写Linux守护进程

2018-01-31 00:00 225 查看

如果要在Red Hat Enterprise Linux上将.NET Core进程作为后台进程运行,则可以创建自定义systemd单元。今天我将为.NET Core编写两个自定义系统单元的例子。一个是运行.NET Core控制台应用程序的一种类型,另一个是运行ASP.NET Core Web应用程序的简单类型。 

控制台应用程序

建立一个应用程序

您可以用
dotnet run
在systemd中使用指定项目目录作为工作目录。但是,我们来构建一个二进制文件并将其用于systemd。用dotnet new 命令创建您的项目后编辑Program.cs如下。using System;
using System.IO;
 
namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var path = Path.GetTempFileName();
            File.WriteAllText(path, "Hello Temp File!");
            Console.WriteLine($"Wrote temp file: {path}");
        }
    }
}然后用
dotnet publish
命令发布项目。你会看到
bin/<Configuration>/<Framework>目录下的二进制文件

创建一个自定义的systemd

首先,创建一个运行守护进程和工作目录的用户。$ sudo useradd -s /sbin/nologin dotnetuser
$ sudo mkdir /var/SystemdExample
$ sudo cp /home/tatanaka/Documents/git/tanaka-takayoshi/SystemdExample/1.1/ConsoleApp/bin/Release/netcoreapp1.1/publish/* /var/SystemdExample
$ sudo chown -R dotnetuser:dotnetuser /var/SystemdExample然后在
/etc/systemd/system/
目录下创建一个自定义的systemd单元文件。文件名应该是
<unit-name>.<unit-type>
。我创建的目录和文件名为:
/etc/systemd/system/netcore-console-example.service
您应该在ExecStart中指定dotnet的完整路径。以上是红帽提供的.NET Core 1.1的情况。然后你可以用
systemctl
命令执行守护进程。您可以使用
systemctl status
命令或
journalctl
命令查看控制台输出。

使用PrivateTemp

在上述系统单元中,程序在临时文件夹下写入一个文件。你有时想写一个来自其他用户的临时文件是安全的。您可以在
[Service]
section中的指定使用PrivateTemp。
 重新加载单元文件后,程序可以以前一样访问
/tmp
像目录,但这不是实际的
/tmp
目录。

Web应用程序

建立一个应用程序

现在我们来构建一个ASP.NET Core Web应用程序。今天我使用默认的模板项目。
现在可以用dotnet命令运行。

创建一个自定义的systemd

为这个Web应用程序也指定dotnetuser名称。
然后创建一个自定义的systemd单元文件
/etc/systemd/system/netcore-web-example.service
最后,您可以将ASP.NET Core应用程序作为Linux守护程序运行。请注意,此应用程序侦听端口8080代替了ASP.NET Core 默认的 5000,因为我在
ASPNETCORE_URLS
单元文件中指定了环境变量  。
然而这对于ASP.NET Core的生产使用来说是不够的。你可能需要设置一个反向代理服务器,比如Jexus,nginx,防火墙等等。原文地址:http://www.cnblogs.com/xiaoliangge/p/8379992.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: