.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日

相关文章

  • Win10 1709预览版输入法输入文字卡顿怎么办?

    Win10 1709预览版输入法输入文字卡顿怎么办? 本文将介绍Win10 1709预览版输入法输入文字卡顿的解决方法的完整攻略,包括问题原因、解决方法、示例说明等。 1. 问题原因 Win10 1709预览版输入法输入文字卡顿的原因可能是由于输入法设置不当、输入法版本过旧、系统缺少更新等原因导致。 2. 解决方法 以下是解决Win10 1709预览版输入法…

    云计算 2023年5月16日
    00
  • Web API中使用Autofac实现依赖注入

    使用Autofac实现Web API的依赖注入的攻略步骤如下所示: 1. 安装Autofac 在Visual Studio的NuGet包管理器中搜索Autofac,选择安装Autofac和Autofac.WebApi2,这两个包能够提供完成的依赖注入功能。 2. 配置依赖注入 在Web API项目中,新建一个类文件叫做“AutofacConfig.cs”,将…

    云计算 2023年5月17日
    00
  • python中将函数赋值给变量时需要注意的一些问题

    在Python中,函数可以像变量一样被赋值给其他变量。这个特性使得Python在函数式编程方面非常灵活。然而,将函数赋值给变量时也需要注意一些问题,下面详细讲解了这些问题,并提供了一些示例。 1. 注意函数和变量的命名 在将函数赋值给变量时,需要注意函数名称和变量名称的区分。具体来说,不能使用函数的名称来定义变量,否则会覆盖函数,导致无法调用该函数。例如,下…

    云计算 2023年5月18日
    00
  • 云原生周刊:Kubernetes v1.27 发布 | 2023.4.17

    开源项目推荐 Palaemon Palaemon 是一个开源开发工具,用于监控 Kubernetes 集群的健康状况和资源指标并分析内存不足 (OOMKill) 错误。 Gitkube Gitkube 是一种使用 git push 将 Docker 镜像构建和部署到 Kubernetes 上的工具。 经过简单的初始设置后,用户可以简单地持续推送他们的仓库来实…

    云计算 2023年4月18日
    00
  • 云计算的未来畅想(五) — matrix(终篇)

    01本文摘要 —————— “接下来的互联网会是什么? 是“任何人、任何物、任何时间、任何地点,永远在线、随时互动”。 02作者简介 —————— 拖雷  袋鼠云CEO 国内最早一批Oracle ACE Director,2004年加入初创期间的淘宝网,曾担任阿里巴巴集团无线事业部、数据事业部资深总监、生活服务事业部总经理、阿里云事业群总裁助理。2015年转…

    云计算 2023年4月12日
    00
  • Linux云计算-01_介绍以及Linux操作系统安装

    云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。因而,云计算又称为网格计算。通过这项技术,可以在很短的时间内(几秒钟)完成对数以…

    2023年4月9日
    00
  • 全面剖析eBay的Hadoop集群应用及大数据管理

    全面剖析eBay的Hadoop集群应用及大数据管理 eBay是全球最大的在线拍卖和购物平台之一,其成功的关键之一是其高效的Hadoop集群应用和大数据管理能力。本文将介绍eBay如何通过Hadoop集群应用和大数据管理来实现其成功。 1. 背景介绍 eBay是全球最大的在线拍卖和购物平台之一,其每天处理数以亿计的交易数据和用户行为数据。为了处理这些数据,eB…

    云计算 2023年5月16日
    00
  • 大话云计算:群雄华山论剑,谁能笑傲江湖

    临近2017年末,云计算群雄纷纷聚集华山开始坐而论道,当然有时也唇枪舌剑。一时间,华山之巅“Cloud Computing”、“Cloud Native”、“Big Data”、“Data Center”、“Artificial Intelligence”、“OpenStack”、“Container”……等各种词汇不绝于耳。 与此同时,最新一期的云计算英雄…

    云计算 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部