• .net core 定时程序


    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using Microsoft.Extensions.Logging;
    using Quartz;
    using Quartz.Impl;
    using System;
    using System.Collections.Specialized;
    using System.IO;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Star.Service.News
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Time Job Start");
                RunProgram().GetAwaiter().GetResult();
                Console.WriteLine("Hello World!");
                Console.Read();
            }
    
            private static async Task RunProgram()
            {
                try
                {
                    // Grab the Scheduler instance from the Factory  
                    NameValueCollection props = new NameValueCollection
                    {
                        { "quartz.serializer.type", "binary" }
                    };
                    StdSchedulerFactory factory = new StdSchedulerFactory(props);
                    IScheduler scheduler = await factory.GetScheduler();
    
                    // 启动任务调度器  
                    await scheduler.Start();
    
                    // 定义一个 Job              自定义定时任务类
                    IJobDetail job = JobBuilder.Create<TimedBackgroundService>()
                        .WithIdentity("job1", "group1")
                        .Build();
                    ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
                        .WithIdentity("trigger1") // 给任务一个名字  
                        .StartAt(DateTime.Now) // 设置任务开始时间  
                        .ForJob("job1", "group1") //给任务指定一个分组  
                        .WithSimpleSchedule(x => x
                        .WithIntervalInSeconds(180)  //循环的时间 1秒1次 
                        .RepeatForever())
                        .Build();
    
    
                    // 等待执行任务  
                    await scheduler.ScheduleJob(job, trigger);
    
                    // some sleep to show what's happening  
                    //await Task.Delay(TimeSpan.FromMilliseconds(2000));  
                }
                catch (SchedulerException se)
                {
                    await Console.Error.WriteLineAsync(se.ToString());
                }
            }
        }
    }
    using Quartz;
    using Star.Helpers;
    using System;
    using System.Diagnostics;
    using System.Threading.Tasks;
    
    namespace Star.Service.News
    {
        public class TimedBackgroundService : IJob
        {
            public Task Execute(IJobExecutionContext context)
            {
                //return Console.Out.WriteLineAsync("Greetings from HelloJob!");
                JobKey key = context.JobDetail.Key;
                Process Proc = null;
    
                string exeName = "main";
    
                try
                {
                    string destFilePath = "c://chromedriver.exe";
                    string sourceFilePath = CommonHelper.GetPhysicalPath($"newspicker\chromedriver.exe");
    
                    if (!FileHelper.IsExistFile(destFilePath))
                    {
                        FileHelper.CopyTo(sourceFilePath, destFilePath);
                    }
    
                    var myProcess = Process.GetProcesses();
                    foreach (Process MyProcess in myProcess)
                    {
                        //查找是否正在运行 
                        if (MyProcess.ProcessName.CompareTo(exeName) == 0
                            || MyProcess.ProcessName.CompareTo("chrome") == 0
                            || MyProcess.ProcessName.CompareTo("chromedriver") == 0)
                        {
                            MyProcess.Kill(); //杀死当前程序
                        }
                    }
                }
                catch (Exception)
                {
    
                }
    
                try
                {
                    string fileurl = CommonHelper.GetPhysicalPath($"{exeName}.exe");
                    //启动外部程序
                    Proc = Process.Start(fileurl);
    
                    Proc.WaitForExit(120 * 1000);
                    Proc.CloseMainWindow();//通过向进程的主窗口发送关闭消息来关闭拥有用户界面的进程
    
                    context.MergedJobDataMap.Put("RunResult", ApiResult.Success($"新闻采集程序运行时间{(Proc.StartTime - Proc.ExitTime).Milliseconds}"));
                }
                catch (Exception ex)
                {
                    Proc?.WaitForExit(60 * 1000);
                    Proc?.CloseMainWindow();
                    Proc?.Close();
    
                    context.MergedJobDataMap.Put("RunResult", ApiResult.Fail(ApiEnum.Error, $"{key.Group}.{key.Name}:{ ex.Message}"));
                }
                finally
                {
                    Proc.Close();//释放与此组件关联的所有资源
                }
                return Task.CompletedTask;
            }
        }
    }
  • 相关阅读:
    项目设计之---------- 模版模式利用
    项目设计之一------简单工厂模式利用
    项目设计之----命令模式的利用
    项目设计之一---------- 代码重构
    项目设计之---------- 类的设计原则
    项目设计之一-------------项目包的设计原则(原)
    模式经验/理解
    Java常量定义需要注意事项及static作用(复习)
    H2数据库使用 详解
    开源数据库 H2, HSQLDB, DERBY, PostgreSQL, MySQL区别/对比图表( 附加翻译) h2数据库
  • 原文地址:https://www.cnblogs.com/smile-live/p/11314420.html
Copyright © 2020-2023  润新知