.net Core 3.0 WebApi 创建Linux守护进程的方法

请看下面的详细讲解:

创建Linux守护进程

在Linux系统中,可以通过将程序作为守护进程的方式来运行,使得程序在后台持续运行,不会因为用户退出或系统重启而停止。下面是关于如何创建Linux守护进程的步骤:

步骤一:编写WebApi代码

首先,需要编写一个.NET Core3.0 WebApi项目,并编写需要持续运行的代码(比如后台定时任务等)。代码可以参考以下示例:

using System;
using System.Threading;

namespace WebApiTest
{
    public class BackgroundTask
    {
        public void StartTask()
        {
            while (true)
            {
                Console.WriteLine("Background Task is running...");
                Thread.Sleep(1000);
            }
        }
    }
}

步骤二:安装NuGet包

安装Topshelf和Microsoft.Extensions.Hosting NuGet包,并在WebApi项目中引用。

步骤三:编写守护进程代码

在WebApi项目中编写一个类,用于创建和运行守护进程。代码可以参考以下示例:

using System;
using Microsoft.Extensions.Hosting;
using Topshelf;

namespace WebApiTest
{
    public class DaemonService : ServiceControl, IHostedService
    {
        public IHostApplicationLifetime ApplicationLifetime { get; }
        private readonly BackgroundTask _backgroundTask;

        public DaemonService(BackgroundTask backgroundTask, IHostApplicationLifetime applicationLifetime)
        {
            _backgroundTask = backgroundTask;
            ApplicationLifetime = applicationLifetime;
        }

        public bool Start(HostControl hostControl)
        {
            Console.WriteLine("Starting Daemon Service...");
            _backgroundTask.StartTask();
            Console.WriteLine("Daemon Service Started.");
            return true;
        }

        public bool Stop(HostControl hostControl)
        {
            Console.WriteLine("Stopping Daemon Service...");
            ApplicationLifetime.StopApplication();
            Console.WriteLine("Daemon Service Stopped.");
            return true;
        }

        public virtual async Task StartAsync(CancellationToken cancellationToken)
        {
            await Task.Factory.StartNew(() => Start(null), cancellationToken);
        }

        public virtual async Task StopAsync(CancellationToken cancellationToken)
        {
            await Task.Factory.StartNew(() => Stop(null), cancellationToken);
        }
    }
}

步骤四:在Program.cs中配置守护进程

在WebApi项目的Program.cs文件中,将守护进程配置为使用Topshelf来创建和运行。代码可以参考以下示例:

using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Topshelf;

namespace WebApiTest
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var isService = !(Debugger.IsAttached || args.Contains("--console"));

            var builder = CreateHostBuilder(args.Where(arg => arg != "--console").ToArray());

            var host = builder.Build();

            if (isService)
            {
                var exitCode = HostFactory.Run(x =>
                {
                    x.Service<DaemonService>(s =>
                    {
                        s.ConstructUsing(srv => ActivatorUtilities.CreateInstance<DaemonService>(host.Services));
                        s.WhenStarted((srv, hostControl) => srv.Start(hostControl));
                        s.WhenStopped((srv, hostControl) => srv.Stop(hostControl));
                    });
                    x.RunAsLocalSystem();

                    x.SetDescription("WebApi Daemon Service");
                    x.SetDisplayName("WebApi Daemon");
                    x.SetServiceName("WebApiDaemon");
                });

                int exitCodeValue = (int)Convert.ChangeType(exitCode, exitCode.GetTypeCode());
                Environment.ExitCode = exitCodeValue;
            }
            else
            {
                host.Run();
            }
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddSingleton<BackgroundTask>();
                    services.AddHostedService<DaemonService>();
                })
                .UseSerilog();
    }
}

以上代码将WebApi项目构建为了一个守护进程,并通过Topshelf包来管理守护进程的启动和停止。

示例说明

在以上步骤完成后,可以通过以下两个示例来验证守护进程的创建和运行效果:

示例一:运行守护进程

  1. 在Linux系统中,使用命令行进入到WebApi项目的根目录。

  2. 使用以下命令来运行守护进程:

sudo dotnet {WebApi项目名称}.dll
  1. 观察程序的输出,可以看到守护进程已经开始持续运行。按Ctrl+C可以停止程序。

示例二:使用systemd将WebApi设为守护进程

  1. 在Linux系统中,使用命令行进入到WebApi项目的根目录。

  2. 创建并编辑一个WebApi.service文件:

sudo nano /etc/systemd/system/WebApi.service
  1. 将以下文本复制到WebApi.service文件中:
[Unit]
Description=WebApi Daemon Service
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/{WebApi项目目录}
ExecStart=/usr/bin/dotnet {WebApi项目名称}.dll
Restart=always

[Install]
WantedBy=multi-user.target
  1. 保存WebApi.service文件,并运行以下命令来启用和运行守护进程:
sudo systemctl daemon-reload
sudo systemctl enable WebApi
sudo systemctl start WebApi
  1. 守护进程已经开始运行,可以使用以下命令来查看运行状态:
sudo systemctl status WebApi

以上两条示例展示了如何在Linux系统中创建并运行.NET Core 3.0 WebApi守护进程的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.net Core 3.0 WebApi 创建Linux守护进程的方法 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • web2.0中流行的设计元素:颜色

    标题:Web2.0中流行的设计元素:颜色 Web2.0是一个经典的设计风格,其在网站的颜色方面的应用已经成为了Web设计的主流。本文将深入探讨Web2.0中颜色的设计元素。 原则 在Web2.0中,颜色的应用主要遵循以下原则: 选择有限的颜色。一般来说,网站的颜色不应超过3~4个,这样能够确保界面的简洁性和清晰性。同时,颜色的使用要求与品牌定位保持一致。 运…

    云计算 2023年5月17日
    00
  • JavaScript实现获取图片文件真实格式的示例代码

    下面是关于“JavaScript实现获取图片文件真实格式的示例代码”的完整攻略,包含两个示例说明。 简介 在JavaScript中,我们可以使用FileReader对象来读取文件内容,并使用ArrayBuffer对象来处理二进制数据。在本攻略中,我们将介绍如何使用JavaScript来获取图片文件的真实格式。 步骤 在JavaScript中获取图片文件的真实…

    云计算 2023年5月16日
    00
  • ASP.NET Core 6.0 基于模型验证的数据验证功能

    ASP.NET Core 6.0 基于模型验证的数据验证功能是一种非常实用的功能,可以帮助我们在后端对数据进行有效的验证,从而提高应用程序的安全性和可靠性。下面是 ASP.NET Core 6.0 基于模型验证的数据验证功能的完整攻略,包括使用方法和示例说明。 使用方法 ASP.NET Core 6.0 基于模型验证的数据验证功能可以通过在模型中添加数据注解…

    云计算 2023年5月16日
    00
  • python 实现 hive中类似 lateral view explode的功能示例

    对于如何在Python中实现Hive中类似lateral view explode的功能,可以采用Python中的pandas库进行操作。下面是具体的攻略: 使用 Pandas 实现 Hive 中的 Lateral View Explode 功能 前置条件 在执行以下操作之前,请确保已经: 安装了 Python 3.x 版本; 安装了 Pandas 库、Ha…

    云计算 2023年5月18日
    00
  • 「深圳云栖大会」大数据时代以及人工智能推动下的阿里云异构计算

    为什么80%的码农都做不了架构师?>>>    摘要: 最近几年,在大数据和人工智能的推动下,异构计算有了长足的发展。无论是在产品形态上,还是在应用领域上,阿里云异构计算都取得了累累硕果。 最近几年,在大数据和人工智能的推动下,异构计算有了长足的发展。无论是在产品形态上,还是在应用领域上,阿里云异构计算都取得了累累硕果。 3月29日上午,深…

    云计算 2023年4月13日
    00
  • Python的Django REST框架中的序列化及请求和返回

    下面详细讲解一下“Python的Django REST框架中的序列化及请求和返回”的完整攻略: 一、Django REST框架中的序列化 在Django REST框架中,序列化是指将Django模型对象转换为Python原生数据类型的过程。通常情况下,在Django REST框架的视图函数中会根据请求参数从数据库中获取模型对象,然后对模型对象进行序列化,将序…

    云计算 2023年5月18日
    00
  • 云计算–网络原理与应用–20171118–静态路由配置与原理

    学习目的:   1.理解路由的原理;   2.学会配置静态路由和默认路由   1.路由器工作在网络层,主要作用是为数据选择最佳路径,最终送达目的地。   2.路由器工作原理:根据路由表转发数据包,路由表中有目的IP地址的网段,路由器就转发,没有就丢弃。   3.路由表的形成:  直连网段:当路由器上配置接口的IP地址,并且接口状态为UP时,路由表中出现直连路…

    云计算 2023年4月10日
    00
  • 【openstack】cloudkitty组件,入门级安装(快速)

    **什么是CloudKitty?** CloudKitty是OpenStack等的评级即服务项目。该项目旨在成为云的退款和评级的通用解决方案。从历史上看,它只能在OpenStack上下文中运行它,但现在可以在独立模式下运行CloudKitty。 @ 目录 前言 架构 安装 配置 启动 检索并安装 CloudKitty 的仪表板 前言 什么是CloudKitt…

    2023年4月9日
    00
合作推广
合作推广
分享本页
返回顶部