netcore 使用Topshelf 每天定時備份雲服務器數據庫備份


前言

  公司需要增加異地備份容災服務器,所以定期需要吧雲服務器的數據庫備份到本地

 

Topshelf

  netcore安裝win機的服務方法有很多這邊只記錄公司當前使用的Topshelf

  

PM> Install-Package Topshelf

 Program 我 的啟動文件 調試階段不安裝服務

static void Main(string[] args)
        {
            Console.WriteLine("自動備份雲服務器數據庫!");

            var isService = !(Debugger.IsAttached || args.Contains("--console"));

            //var builder = CreateWebHostBuilder(args.Where(arg => arg != "--console").ToArray());
            var Configuration = new ConfigurationBuilder()
                     .SetBasePath(Directory.GetCurrentDirectory())
                     .AddJsonFile("Conf/appsettings.json", optional: true, reloadOnChange: true)
                     .Build();
            if (isService)
            {

                HostFactory.Run(x =>
                {
                    x.Service<ServiceCenter>();
                    x.RunAsLocalSystem();
                    x.SetDescription("自動備份");
                    x.SetDisplayName("自動備份");
                    x.SetServiceName("自動備份");

                    x.EnablePauseAndContinue();
                });
            }
            else
            {
                //ILoggerRepository repository = LogManager.CreateRepository("NETCoreRepository");
                //XmlConfigurator.Configure(repository, new FileInfo(Directory.GetCurrentDirectory() + "\\Conf\\log4net.config"));

                CreateHostBuilder(args).Build().Run();
            }
        }

IWebhost  Startup 增加注入和使用

 IServiceCollection=>services.AddDispatch();
IApplicationBuilder=>UseDispatch();

 啟動

 

 

 

 

 

 

執行地址是反射地址Job的和xml配置時一致

 

 

 立即執行一下試試

 

 

 

 

 

 

 

我的job代碼

 

public class BakJob : IJob
    {
        public Task Execute(IJobExecutionContext context)
        {

            var BaseUrl = "http://{你的服務器}/xxx/xxx.zip";
            new WebClient { }.DownloadFile(BaseUrl, "bak.zip");


            return Task.CompletedTask;
        }
    }

  

 OK

 

那么我要注入這個job怎么處理

使用配置文件來重新定義文件名 url地址等 配置 這里示例一下改名字吧

 

    public class BakJob : IJob
    {
        public TestBakConfig testBakConfig;

        public BakJob(IOptions<TestBakConfig> options)
        {
            testBakConfig = options.Value;
        }

        public Task Execute(IJobExecutionContext context)
        {

            var BaseUrl = "http://xxx/xx/xx";
            new WebClient { }.DownloadFile(BaseUrl, testBakConfig.FullName+".zip");


            return Task.CompletedTask;
        }
    }

  

注:Job 必須 需要先注入工廠才能使用注入的  我這邊 WooDispatch 替我處理了

 

 

 

 OK

  源碼示例


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM