前言
公司需要增加異地備份容災服務器,所以定期需要吧雲服務器的數據庫備份到本地
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