public void Start()
        {
            Console.WriteLine("Starting scheduler...");

            var scheduler = schedulerFactory.GetScheduler();

            // define the job and ask it to run
            var map = new JobDataMap();

            map.Put("msg", "Some message!");

            var job = JobBuilder.Create <HelloJob>()
                      .WithIdentity("localJob", "default")
                      .UsingJobData(map).RequestRecovery(true).Build();

            ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                   .WithIdentity("remotelyAddedTrigger", "default")
                                   .WithCronSchedule("/5 * * ? * *")
                                   .StartAt(DateTimeOffset.UtcNow)
                                   .ForJob(job)
                                   .Build();

            if (!scheduler.CheckExists(job.Key))
            {
                scheduler.ScheduleJob(job, trigger);
            }

            scheduler.Start();
        }
Example #2
0
        private void SetWorkerState(bool start)
        {
            if (Jobs != null && Jobs.Count > 0)
            {
                foreach (JobBase job in Jobs)
                {
                    try
                    {
                        if (start)
                        {
                            IJobDetail jobDetail = JobBuilder.Create(job.GetType())
                                                   .WithIdentity($"job_{job.GetType().ToString()}")
                                                   .Build();

                            ICronTrigger cronTrigger = (ICronTrigger)TriggerBuilder.Create()
                                                       .WithIdentity($"trigger_{job.GetType().ToString()}")
                                                       .WithCronSchedule(job.CronSchedule)
                                                       .Build();

                            scheduler.ScheduleJob(jobDetail, cronTrigger).Wait();

                            Log.Current.Information("JobsManager", job.GetType().ToString() + " is started.");
                        }
                        else
                        {
                            Log.Current.Information("JobsManager", job.GetType().ToString() + " is stop.");
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.Current.Error("JobsManager", ex.ToString());
                    }
                }
            }
        }
Example #3
0
        private static void CodeMethod()
        {
            Console.WriteLine(DateTime.Now.ToString());

            //1.首先创建一个作业调度池
            ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
            var scheduler = schedulerFactory.GetScheduler();
            //2.创建出来一个具体的作业
            IJobDetail job = JobBuilder.Create <JobDemo>().Build();

            //3.创建并配置一个触发器
            #region 每隔5秒执行一次Execute方法,无休止
            //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(5).WithRepeatCount(int.MaxValue)).Build();
            #endregion

            #region  序每5秒执行一次,一共执行50次,开始执行时间设定在当前时间,结束时间我设定在1小时后,不管50次有没有执行完,1小时后,程序都不再继续执行
            DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2);
            DateTimeOffset endTime   = DateBuilder.NextGivenSecondDate(DateTime.Now.AddHours(1), 5);
            //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime)
            //                          .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).WithRepeatCount(50))
            //                          .Build();
            #endregion

            #region 实现各种时间纬度的调用(使用cron-like):在每小时的第10,20,30分钟,每分钟的第11,27秒执行一次
            ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime).WithCronSchedule("11,27 10,20,30 * * * ? ").Build();
            #endregion

            //4.加入作业调度池中
            scheduler.ScheduleJob(job, trigger);
            //5.开始运行
            scheduler.Start();
            Console.ReadKey();
        }
Example #4
0
        /// <summary>
        /// 添加任务计划
        /// </summary>
        /// <returns></returns>
        private async Task AddScheduleJob(List <OpenJobEntity> entityList)
        {
            try
            {
                foreach (OpenJobEntity entity in entityList)
                {
                    entity.F_StarRunTime = DateTime.Now;
                    entity.F_EndRunTime  = DateTime.Now.AddSeconds(-1);
                    DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(entity.F_StarRunTime, 1);
                    DateTimeOffset endRunTime  = DateBuilder.NextGivenSecondDate(DateTime.MaxValue.AddDays(-1), 1);
                    await _service.SubmitForm(entity, entity.F_Id);

                    IJobDetail job = JobBuilder.Create <JobExecute>().WithIdentity(entity.F_JobName, entity.F_JobGroup).Build();
                    job.JobDataMap.Add("F_Id", entity.F_Id);

                    ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                           .StartAt(starRunTime)
                                           .EndAt(endRunTime)
                                           .WithIdentity(entity.F_JobName, entity.F_JobGroup)
                                           .WithCronSchedule(entity.F_CronExpress)
                                           .Build();
                    await _scheduler.ScheduleJob(job, trigger);
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteWithTime(ex);
            }
        }
Example #5
0
 public void scheduler(Action act, string cron)
 {
     //IL_0000: Unknown result type (might be due to invalid IL or missing references)
     //IL_0006: Expected O, but got Unknown
     //IL_0029: Unknown result type (might be due to invalid IL or missing references)
     //IL_002f: Expected O, but got Unknown
     //IL_004f: Unknown result type (might be due to invalid IL or missing references)
     //IL_0055: Expected O, but got Unknown
     //IL_006e: Unknown result type (might be due to invalid IL or missing references)
     //IL_0075: Expected O, but got Unknown
     try
     {
         JobDataMap val = new JobDataMap();
         ((DirtyFlagMap <string, object>)(object) val).Add(RunnableJob.TASK_KEY, (object)act);
         string        text = "job_" + Conversions.ToString(NextId());
         JobKey        val2 = new JobKey(text);
         JobDetailImpl val3 = (JobDetailImpl)JobBuilder.Create(typeof(RunnableJob)).UsingJobData(val).WithIdentity(val2)
                              .Build();
         CronScheduleBuilder val4 = CronScheduleBuilder.CronSchedule(cron);
         ICronTrigger        val5 = (ICronTrigger)TriggerBuilder.Create().WithSchedule((IScheduleBuilder)(object)val4).Build();
         _scheduler.ScheduleJob((IJobDetail)(object)val3, (ITrigger)(object)val5);
     }
     catch (Exception ex)
     {
         ProjectData.SetProjectError(ex);
         Exception ex2 = ex;
         log.Error((object)ex2);
         ProjectData.ClearProjectError();
     }
 }
Example #6
0
        /// <summary>
        /// 用触发器来创建任务
        /// </summary>
        public static void TriggerRun()
        {
            _log.Info("正在初始化工作任务");

            IJobDetail job = JobBuilder.Create <SimpleJob>()
                             .WithIdentity("job", "group")
                             .Build();

            //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
            //                        .WithIdentity("trigger", "group")
            //                        .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).WithMisfireHandlingInstructionIgnoreMisfires().RepeatForever())
            //                        .Build();
            _log.Info("正在设置触发器");
            ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                   .WithIdentity("trigger", "group")
                                   .WithCronSchedule("0 0/5 * * * ?")
                                   .Build();


            //WithCronSchedule:  秒 分钟 小时 日期(1~31) 月份(1~12) 星期几
            //*表示任意  -表示区间

            _log.Info("注册工作任务");

            ISchedulerFactory factory   = new StdSchedulerFactory();
            IScheduler        scheduler = factory.GetScheduler();

            scheduler.ScheduleJob(job, trigger);
            scheduler.Start();
        }
        private void Grid_Click(object sender, RoutedEventArgs e)
        {
            Button button = e.Source as Button;

            if (button.Name == nameof(btnStart))
            {
                scheduler = StdSchedulerFactory.GetDefaultScheduler();
                IJobDetail job = JobBuilder.Create <ExecutePsFileJob>()
                                 .WithIdentity("job1", "group1")
                                 .Build();

                ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                       .WithIdentity("trigger1", "group1")
                                       .WithCronSchedule(cronExpression)
                                       .Build();

                // Tell quartz to schedule the job using our trigger
                scheduler.ScheduleJob(job, trigger);
                scheduler.Start();
                Logger.Info("Start...");
            }
            else if (button.Name == nameof(btnStop))
            {
                scheduler.Shutdown();
                Logger.Info("Stop");
            }
        }
        public static void Start()
        {
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));

            // construct a scheduler factory
            ISchedulerFactory schedFact = new StdSchedulerFactory();

            // get a scheduler
            IScheduler sched = schedFact.GetScheduler();

            sched.Start();

            // define the job and tie it to our HelloJob class
            IJobDetail job = JobBuilder.Create <TimerJob>()
                             .WithIdentity("myJob", "group1")
                             .Build();

            //5 minutes between 8am and 23pm, every day
            ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                   .WithIdentity("trigger1", "group1")
                                   .WithCronSchedule("0 0/5 8-23 * * ?")
                                   .Build();

            sched.ScheduleJob(job, trigger);
        }
Example #9
0
        protected override void OnStart(string[] args)
        {
            //proceso dos alerta reparos
            string tiempoEjecucionActualizacionAutomatica = ConfigurationManager.AppSettings["tiempoEjecucionActualizacionAutomatica"].ToString();
            // First we must get a reference to a scheduler
            ISchedulerFactory sf = new StdSchedulerFactory();

            sched = sf.GetScheduler();
            // jobs can be scheduled before sched.start() has been called
            // job 1 will run every 20 seconds
            IJobDetail job1 = JobBuilder.Create <DescargaAutomaticaActualizacion>()
                              .WithIdentity("job1", "group1")
                              .Build();

            ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                   .WithIdentity("trigger1", "group1")
                                   .WithCronSchedule(tiempoEjecucionActualizacionAutomatica)
                                   .Build();

            DateTimeOffset ft = sched.ScheduleJob(job1, trigger);

            //All of the jobs have been added to the scheduler, but none of the
            //jobs
            // will run until the scheduler has been started
            sched.Start();
        }
Example #10
0
        /// <summary>
        /// 根据cron表达式定时执行一个job
        /// </summary>
        /// <param name="strJobKey">job key</param>
        /// <param name="strTriggerKey">trigger key</param>
        /// <param name="parameterList">传入参数</param>
        /// <param name="cron">cron 表达式</param>
        public static void Execute <T>(string strJobKey, string strTriggerKey, IDictionary <string, object> parameterList, string cron) where T : IJob
        {
            ISchedulerFactory sf    = new StdSchedulerFactory();
            IScheduler        sched = sf.GetScheduler();


            JobKey jobKey = new JobKey(strJobKey);

            sched.DeleteJob(jobKey);
            TriggerKey triggerKey = new TriggerKey(strTriggerKey);

            IJobDetail job = JobBuilder.Create <T>()
                             .WithIdentity(jobKey)
                             .Build();

            if (null != parameterList)
            {
                foreach (var item in parameterList)
                {
                    job.JobDataMap.Add(item.Key, item.Value);
                }
            }


            // 触发器
            ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                   .WithIdentity(triggerKey)
                                   .WithCronSchedule(cron)
                                   .Build();

            sched.ScheduleJob(job, trigger);
            sched.Start();
        }
Example #11
0
        /// <summary>
        /// Function: start job with a given schedule
        /// </summary>
        /// <param name="schedule">Quartz formatted schedule</param>
        public void StartJob(string schedule)
        {
            // First we must get a reference to a scheduler
            ISchedulerFactory sf = new StdSchedulerFactory();

            _sched = sf.GetScheduler();


            // jobs can be scheduled before sched.start() has been called

            // job 1 will run every X minute

            string jobID = "Strategy Job " + _strategy.ID + " " + schedule;

            IJobDetail job = JobBuilder.Create <StrategyJob>()
                             .WithIdentity(jobID, "Strategy Group")
                             .Build();

            ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                   .WithIdentity(jobID, "Strategy Group")
                                   //.WithCronSchedule("0 0/" + minutes + " * * * ?")
                                   .WithCronSchedule(schedule)
                                   .Build();

            job.JobDataMap["Strategy"] = _strategy;

            DateTimeOffset ft = _sched.ScheduleJob(job, trigger);

            // All of the jobs have been added to the scheduler, but none of the
            // jobs
            // will run until the scheduler has been started
            _sched.Start();
        }
Example #12
0
 public long GetRunTime(string cron, int runTime)
 {
     //IL_0017: Unknown result type (might be due to invalid IL or missing references)
     //IL_003c: Expected O, but got Unknown
     //IL_003b: Unknown result type (might be due to invalid IL or missing references)
     //IL_0055: Expected O, but got Unknown
     checked
     {
         try
         {
             CronScheduleBuilder    val            = CronScheduleBuilder.CronSchedule(cron);
             ICronTrigger           val2           = (ICronTrigger)TriggerBuilder.Create().WithSchedule((IScheduleBuilder)(object)val).Build();
             DateTimeOffset         dateTimeOffset = DateTimeOffset.Now.Subtract(TimeSpan.FromMinutes(runTime)).ToLocalTime();
             IList <DateTimeOffset> list           = (IList <DateTimeOffset>)TriggerUtils.ComputeFireTimesBetween((IOperableTrigger)val2, (ICalendar)null, dateTimeOffset, DateTimeOffset.Now.ToLocalTime());
             foreach (DateTimeOffset item in list)
             {
                 long num = (long)Math.Round(item.AddMinutes(runTime).Subtract(DateTimeOffset.Now).TotalMilliseconds);
                 if (num > 0 && num <= runTime * 60 * 1000)
                 {
                     return(num);
                 }
             }
         }
         catch (Exception ex)
         {
             ProjectData.SetProjectError(ex);
             Exception ex2 = ex;
             log.Error((object)ex2);
             ProjectData.ClearProjectError();
         }
         return(0L);
     }
 }
Example #13
0
        static void Main(string[] args)
        {
            Console.WriteLine(DateTime.Now.ToString("r"));

            //1.首先创建一个作业调度池
            ISchedulerFactory schedf = new StdSchedulerFactory();
            IScheduler        sched  = schedf.GetScheduler();

            //2.创建出来一个具体的作业
            IJobDetail job = JobBuilder.Create <JobDemo>().Build();

            //NextGivenSecondDate:如果第一个参数为null则表名当前时间往后推迟2秒的时间点。
            DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2);
            DateTimeOffset endTime   = DateBuilder.NextGivenSecondDate(DateTime.Now.AddHours(2), 3);



            //3.创建并配置一个触发器
            //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(3).WithRepeatCount(int.MaxValue)).Build();
            //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime)
            //                                                                .WithSimpleSchedule(x => x.WithIntervalInSeconds(3).WithRepeatCount(100))
            //                                                                .Build();
            ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime)
                                   .WithCronSchedule("1,10,14 10,20,25,26,33,54 * * * ? ")
                                   .Build();


            //4.加入作业调度池中
            sched.ScheduleJob(job, trigger);

            //5.开始运行
            sched.Start();
            Console.ReadKey();
            //Add some comments.
        }
Example #14
0
        /// <summary>
        /// 开启任务
        /// </summary>
        public void Start()
        {
            ISchedulerFactory factory   = new StdSchedulerFactory();
            IScheduler        scheduler = factory.GetScheduler().Result;

            foreach (TaskInfo info in tasks)
            {
                if (info.IsEnabled)
                {
                    Type type = Type.GetType(info.TaskType);
                    if (type != null)
                    {
                        string     name      = type.Name + "_trigger";
                        IJobDetail jobDetail = JobBuilder.Create(typeof(QuartzTask)).WithIdentity(type.Name).Build();
                        jobDetail.JobDataMap.Add(new KeyValuePair <string, object>("Id", info.Id));
                        TriggerBuilder builder = TriggerBuilder.Create().WithIdentity(name).WithCronSchedule(info.TaskRule);
                        if (info.StartDate > DateTime.MinValue)
                        {
                            builder.StartAt(new DateTimeOffset(info.StartDate));
                        }
                        DateTime?endDate   = info.EndDate;
                        DateTime startDate = info.StartDate;
                        if (endDate.HasValue ? (endDate.GetValueOrDefault() > startDate) : false)
                        {
                            DateTime?nullable2 = info.EndDate;
                            builder.EndAt(nullable2.HasValue ? new DateTimeOffset?(nullable2.GetValueOrDefault()) : null);
                        }
                        ICronTrigger trigger  = (ICronTrigger)builder.Build();
                        DateTime     dateTime = scheduler.ScheduleJob(jobDetail, trigger).Result.DateTime;
                        info.NextDate = new DateTime?(TimeZoneInfo.ConvertTime(dateTime, trigger.TimeZone));
                    }
                }
            }
            scheduler.Start();
        }
 /// <summary>
 /// 修改Job时间
 /// </summary>
 /// <param name="triggerName"></param>
 /// <param name="triggerGroup"></param>
 /// <param name="timeExp"></param>
 /// <returns></returns>
 public bool ModifyJobTime(string triggerName, string triggerGroup, string timeExp)
 {
     try
     {
         IScheduler   schedule = scheduleFactory.GetScheduler();
         ICronTrigger trigger  = (ICronTrigger)schedule.GetTrigger(new TriggerKey(triggerName, triggerGroup));
         if (trigger == null)
         {
             //log:未找到触发器triggerName:triggerName+triggerGroup:triggerGroup
             return(false);
         }
         string oldCron = trigger.CronExpressionString;
         string newCron = timeExp;
         if (oldCron != newCron)
         {
             schedule.PauseTrigger(new TriggerKey(triggerName, triggerGroup));
             trigger.CronExpressionString = newCron;
             schedule.RescheduleJob(new TriggerKey(triggerName, triggerGroup), trigger);
             // schedule.ResumeTrigger(new TriggerKey(triggerName, triggerGroup));
         }
         return(true);
     }
     catch (Exception ex)
     {
         //log:修改任务失败+triggerName:triggerName+triggerGroup:triggerGroup+ex.message
         return(false);
     }
 }
Example #16
0
        private static void Example1()
        {
            Console.WriteLine(DateTime.Now.ToString("r"));
            //1.首先创建一个作业调度池
            ISchedulerFactory schedf = new StdSchedulerFactory();
            IScheduler        sched  = schedf.GetScheduler().Result;
            //2.创建出来一个具体的作业
            IJobDetail job = JobBuilder.Create <JobDemo>().Build();
            //3.创建并配置一个触发器
            //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().WithSimpleSchedule(x => x.WithIntervalInSeconds(3).WithRepeatCount(3)).Build();

            //NextGivenSecondDate:如果第一个参数为null则表名当前时间往后推迟2秒的时间点。
            //使用2:假如没执行完1分钟后不执行
            DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddSeconds(1), 2);
            //DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddMinutes(1), 3);
            //ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime).
            //    WithSimpleSchedule(x => x.WithIntervalInSeconds(3).WithRepeatCount(100)).Build();

            //使用3:每分钟的第1,10,14,25,35,50秒执行一次。
            //那么上面显然是不能满足的。这是我就把cron-like(由7段构成:秒 分 时 日 月 星期 年(可选))表达式引入进来,以实现各种时间纬度的调用
            //"-" :表示范围  MON-WED表示星期一到星期三
            // "," :表示列举 MON, WEB表示星期一和星期三
            //"*" :表是“每”,每月,每天,每周,每年等
            //"/" :表示增量:0 / 15(处于分钟段里面) 每15分钟,在0分以后开始,3 / 20 每20分钟,从3分钟以后开始
            //"?" :只能出现在日,星期段里面,表示不指定具体的值
            //"L" :只能出现在日,星期段里面,是Last的缩写,一个月的最后一天,一个星期的最后一天(星期六)
            //"W" :表示工作日,距离给定值最近的工作日
            //"#" :表示一个月的第几个星期几,例如:"6#3"表示每个月的第三个星期五(1 = SUN...6 = FRI,7 = SAT)
            DateTimeOffset endTime = DateBuilder.NextGivenSecondDate(DateTime.Now.AddYears(2), 3);
            ICronTrigger   trigger = (ICronTrigger)TriggerBuilder.Create().StartAt(startTime).EndAt(endTime)
                                     .WithCronSchedule("1,10,14,25,35,50 * * * * ? ")
                                     .Build();

            //4.加入作业调度池中
            sched.ScheduleJob(job, trigger);

            //加入第二个作业 1个job只能绑定在1个trigger
            IJobDetail     job2     = JobBuilder.Create <JobDemo2>().WithIdentity("job2", "gorup2").Build();
            ISimpleTrigger trigger2 = (ISimpleTrigger)TriggerBuilder.Create().
                                      WithSimpleSchedule(x => x.WithIntervalInSeconds(3).WithRepeatCount(2)).Build();

            sched.ScheduleJob(job2, trigger2);

            //5.开始运行
            sched.Start();
            ////挂起3分钟
            //Thread.Sleep(TimeSpan.FromMinutes(3));
            ////3分钟后关闭作业调度,将不在执行
            //sched.Shutdown();

            //暂停所有
            //sched.PauseAll();
            //1分钟后移除trigger2
            Thread.Sleep(TimeSpan.FromMinutes(1));
            //重启
            //sched.ResumeAll();

            sched.UnscheduleJob(trigger2.Key);//移除trigger2
        }
Example #17
0
        private void btnTest1_Click(object sender, EventArgs e)
        {
            // construct a scheduler factory
            ISchedulerFactory schedFact = new StdSchedulerFactory();
            // get a scheduler
            IScheduler sched = schedFact.GetScheduler();

            IJobDetail myJob = JobBuilder.Create <HelloJob>()
                               .WithIdentity("myJob", "group1")
                               .Build();

            //Build a trigger that will fire every other minute, between 8am and 5pm, every day:
            ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                   .WithIdentity("trigger3", "group1")
                                   .WithCronSchedule("0 0/2 8-17 * * ?")
                                   .ForJob("myJob", "group1")
                                   .Build();

            //Build a trigger that will fire daily at 10:42 am:
            // we use CronScheduleBuilder's static helper methods here
            trigger = (ICronTrigger)TriggerBuilder.Create()
                      .WithIdentity("trigger3", "group1")
                      .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(10, 42))
                      .ForJob(myJob)
                      .Build();

            trigger = (ICronTrigger)TriggerBuilder.Create()
                      .WithIdentity("trigger3", "group1")
                      .WithCronSchedule("0 42 10 * * ?")
                      .ForJob("myJob", "group1")
                      .Build();


            //Build a trigger that will fire on Wednesdays at 10:42 am, in a TimeZone other than the system's default:
            trigger = (ICronTrigger)TriggerBuilder.Create()
                      .WithIdentity("trigger3", "group1")
                      .WithSchedule(CronScheduleBuilder
                                    .WeeklyOnDayAndHourAndMinute(DayOfWeek.Wednesday, 10, 42)
                                    .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time")))
                      .ForJob(myJob)
                      .Build();

            trigger = (ICronTrigger)TriggerBuilder.Create()
                      .WithIdentity("trigger3", "group1")
                      .WithCronSchedule("0 42 10 ? * WED", x => x
                                        .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time")))
                      .ForJob(myJob)
                      .Build();


            //   When building CronTriggers, you specify the misfire instruction as part of the cron schedule (via WithCronSchedule extension method):失败后某人指令
            trigger = (ICronTrigger)TriggerBuilder.Create()
                      .WithIdentity("trigger3", "group1")
                      .WithCronSchedule("0 0/2 8-17 * * ?", x => x
                                        .WithMisfireHandlingInstructionFireAndProceed())
                      .ForJob("myJob", "group1")
                      .Build();
            sched.ScheduleJob(myJob, trigger);
        }
Example #18
0
        public void Execute(IJobExecutionContext context)
        {
            ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
            IScheduler        scheduler        = schedulerFactory.GetScheduler();

            string        jobGroupName    = "DownDataJobGroup";
            string        triGroupName    = "DownDataTriGroup";
            string        jobNamePex      = "DownDataJob_";
            string        triNamePex      = "DownDataTri_";
            List <string> rescheduledJobs = new List <string>();

            //获取所有下载的任务
            var allTask   = AllDownData();;
            var triKeyArr = scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupEquals(triGroupName));

            //删除触发器
            foreach (var t in triKeyArr)
            {
                var        trigger = scheduler.GetTrigger(t);
                IJobDetail job     = scheduler.GetJobDetail(trigger.JobKey);
                var        tmp     = allTask.SingleOrDefault(x => triNamePex + x.ID.ToString() == t.Name);
                if (tmp == null)
                {
                    StopTask(Convert.ToInt32(t.Name.Replace(triNamePex, "")));
                    scheduler.DeleteJob(trigger.JobKey);
                    logger.InfoFormat("脚本服务 移除下表触发器ID【{0}】", t.Name);
                }
            }

            foreach (var t in allTask)
            {
                //新任务
                if (triKeyArr.SingleOrDefault(x => x.Name == triNamePex + t.ID.ToString()) == null)
                {
                    IJobDetail job = JobBuilder.Create <DataDownQuartz>()
                                     .WithIdentity(new JobKey(jobNamePex + t.ID.ToString(), jobGroupName))
                                     .StoreDurably()
                                     .Build();

                    ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                           .WithIdentity(new TriggerKey(triNamePex + t.ID.ToString(), triGroupName))
                                           .ForJob(job)
                                           .StartNow().WithCronSchedule(t.CRON_EXPRESSION)
                                           .Build();
                    logger.InfoFormat("脚本服务 添加下表触发器ID【{0}】", trigger.Key.Name);
                    scheduler.ScheduleJob(job, trigger);
                }
                else
                {
                    ICronTrigger trigger = (ICronTrigger)scheduler.GetTrigger(new TriggerKey(triNamePex + t.ID.ToString(), triGroupName));
                    IJobDetail   job     = scheduler.GetJobDetail(trigger.JobKey);
                    if (trigger.CronExpressionString != t.CRON_EXPRESSION)
                    {
                        logger.InfoFormat("脚本服务 修改触发器【{0}】的时间表达式【{1}】为【{2}】", trigger.Key.Name, trigger.CronExpressionString, t.CRON_EXPRESSION);
                        trigger.CronExpressionString = t.CRON_EXPRESSION;
                    }
                }
            }
        }
Example #19
0
 public static CronTriggerViewModel FromTrigger(ICronTrigger trigger)
 {
     return(new CronTriggerViewModel()
     {
         Expression = trigger.CronExpressionString,
         TimeZone = trigger.TimeZone.Id,
     });
 }
Example #20
0
        /// <summary>
        /// 指定时间执行任务
        /// </summary>
        /// <typeparam name="T">任务类,必须实现IJob接口</typeparam>
        /// <param name="cronExpression">cron表达式,即指定时间点的表达式</param>
        public void ExecuteByCron(string cronExpression)
        {
            ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                   .WithCronSchedule(cronExpression)
                                   .Build();

            Scheduler.ScheduleJob(Job, trigger);
        }
Example #21
0
        private static bool ValidateJobConfiguration <TJobData>(ICronTrigger trigger, IJobDetail job, JobConfiguration <TJobData> jobConfiguration)
            where TJobData : IJobDataConfiguration <TJobData>
        {
            if (job == null)
            {
                return(false);
            }
            var jobDataMap = job.JobDataMap;

            var jobScheduling = jobDataMap[JOB_SCHEDULING_CONFIGURATION] as JobSchedulingConfiguration;

            if (jobScheduling == null)
            {
                _logger.Info($"Job '{job.Key}' has been unscheduled, because of missing job scheduling information.");
                return(false);
            }

            if (!jobScheduling.Equals(jobConfiguration.Scheduling))
            {
                _logger.Info($"Job '{job.Key}' has been unscheduled, because jobs scheduling differs from configured scheduling.");
                return(false);
            }

            var jobData = jobDataMap[JOB_DATA_CONFIGURATION];

            if (jobData == null)
            {
                _logger.Info($"Job '{job.Key}' has been unscheduled, because of missing job data information.");
                return(false);
            }

            if (jobData.GetType() != typeof(TJobData))
            {
                _logger.Info($"Job '{job.Key}' has been unscheduled, because jobs data type differs from configured job data type.");
                return(false);
            }

            var jobDataType = (TJobData)jobData;

            if (!jobDataType.Equals(jobConfiguration.JobData))
            {
                _logger.Info($"Job '{job.Key}' has been unscheduled, because jobs data differs from configured job data.");
                return(false);
            }

            // check trigger cron expression
            // reschedule, if needed
            var countOfFailedExecutions = job.GetCountOfExceptionFires();
            var isPaused = _scheduler.GetTriggerState(trigger.Key).Result == TriggerState.Paused;
            var configurationCronExpression = (countOfFailedExecutions > 0 || isPaused) ? jobConfiguration.Scheduling.SchedulerOnFail : jobConfiguration.Scheduling.Scheduler;

            if (!configurationCronExpression.Equals(trigger.CronExpressionString))
            {
                _scheduler.RescheduleJob(trigger.Key, configurationCronExpression);
            }

            return(true);
        }
Example #22
0
        private static void Schedule(IScheduler sched, Type type, IConfiguration config)
        {
            IScheduleJob scheduleJob = (IScheduleJob)Activator.CreateInstance(type);

            // define the job and tie it
            IJobDetail job = JobBuilder.Create(type)
                             .WithIdentity(type.Name)
                             .Build();

            sched.PauseJob(job.Key);

            String cron = config.GetSection($"Scheduler:Crons:{type.Name}").Value;

            // Update trigger
            if (String.IsNullOrEmpty(cron))
            {
                Console.WriteLine(scheduleJob.ToString() + " pasued.");
                (scheduleJob.ToString() + " pasued.").Log();
            }
            else
            {
                CronScheduleBuilder cronBuilder = CronScheduleBuilder.CronSchedule(cron);

                ICronTrigger cronTrigger = (ICronTrigger)TriggerBuilder.Create()
                                           .WithIdentity(type.Name + "Trigger")
                                           .WithSchedule(cronBuilder)
                                           .ForJob(job)
                                           .Build();

                IReadOnlyCollection <ITrigger> triggers = sched.GetTriggersOfJob(job.Key).Result;

                ICronTrigger currentTrigger = triggers.FirstOrDefault(x => x.GetType().Equals(typeof(CronTriggerImpl))) as ICronTrigger;

                if (currentTrigger == null)
                {
                    sched.ScheduleJob(job, cronTrigger);
                }
                else if (currentTrigger.CronExpressionString != cronTrigger.CronExpressionString)
                {
                    sched.RescheduleJob(cronTrigger.Key, cronTrigger);
                }

                sched.ResumeJob(job.Key);

                Console.WriteLine(scheduleJob.ToString() + " scheduled: " + cronTrigger.CronExpressionString);
                (scheduleJob.ToString() + " scheduled: " + cronTrigger.CronExpressionString).Log();

                try
                {
                    scheduleJob.ResumeJob();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                    ex.Log();
                }
            }
        }
Example #23
0
        /// <summary>
        /// 添加任务计划//或者进程终止后的开启
        /// </summary>
        /// <returns></returns>
        public static async Task <bool> StartScheduleJobAsync(Diary info)
        {
            try
            {
                if (info != null)
                {
                    if (info.RunningStart == null)
                    {
                        info.RunningStart = DateTime.Now;
                    }
                    DateTimeOffset startRunTime = DateBuilder.NextGivenSecondDate(info.RunningStart, 1);
                    if (info.RunningEnd == null)
                    {
                        info.RunningEnd = DateTime.MaxValue.AddDays(-1);
                    }
                    DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(info.RunningEnd, 1);
                    if (string.IsNullOrWhiteSpace(info.CronExpress))
                    {
                        DateTime dt = DateTime.Now.AddMinutes(1);
                        info.CronExpress = $"0 {dt.Minute} {dt.Hour} * * ?";
                    }
                    _scheduler = await GetSchedulerAsync();

                    Type       type = typeof(RemindJob); // Type.GetType(info.JobName, true, true);
                    IJobDetail job  = JobBuilder.Create(type)
                                      .WithIdentity(info.JobName, info.JobGroup)
                                      .Build();
                    job.JobDataMap.Put(Common.REMIND_CONTENT, $"【主题】{info.Title}\r\n【内容】{info.Content}");
                    ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                           .StartAt(startRunTime)
                                           .EndAt(endRunTime)
                                           .WithIdentity(info.JobName, info.JobGroup)
                                           .WithCronSchedule(info.CronExpress)
                                           .Build();
                    ((CronTriggerImpl)trigger).MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;
                    IList <ICronTrigger> triggers = new List <ICronTrigger> {
                        trigger
                    };
                    await _scheduler.ScheduleJob(job, new ReadOnlyCollection <ICronTrigger>(triggers), true);

                    if (!_scheduler.IsStarted)
                    {
                        await _scheduler.Start();
                    }

                    return(true);
                }
                return(false);
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("because one already exists with this identification"))
                {
                    _ = await ResumeScheduleJobAsync(info);
                }
                return(false);
            }
        }
Example #24
0
    public static string ToCronString(this CronScheduleBuilder cronSchedule)
    {
        ICronTrigger trigger = (ICronTrigger)TriggerBuilder
                               .Create()
                               .WithSchedule(cronSchedule)
                               .Build();

        return(trigger.CronExpressionString);
    }
Example #25
0
        /// <summary>
        /// 添加调度任务
        /// </summary>
        /// <param name="JobName">任务名称</param>
        /// <param name="JobGroup">任务分组</param>
        /// <param name="JobNamespaceAndClassName">任务完全限定名</param>
        /// <param name="JobAssemblyName">任务程序集名称</param>
        /// <param name="CronExpress">Cron表达式</param>
        /// <param name="StarTime">开始时间</param>
        /// <param name="EndTime">结束时间</param>
        /// <returns></returns>
        public async Task <ScheduleResult> AddJobAsync(String JobName, String JobGroup, String JobNamespaceAndClassName, String JobAssemblyName, string CronExpress)
        {
            ScheduleResult result = new ScheduleResult();

            try
            {
                if (string.IsNullOrEmpty(JobName) || string.IsNullOrEmpty(JobGroup) || string.IsNullOrEmpty(JobNamespaceAndClassName) || string.IsNullOrEmpty(JobAssemblyName) || string.IsNullOrEmpty(CronExpress))
                {
                    result.ResultCode = -3;
                    result.ResultMsg  = $"参数不能为空";
                    return(result);//出现异常
                }
                var            starRunTime = DateTime.Now;
                var            EndTime     = DateTime.MaxValue.AddDays(-1);
                DateTimeOffset endRunTime  = DateBuilder.NextGivenSecondDate(EndTime, 1);
                JobKey         jobKey      = new JobKey(JobName, JobGroup);
                if (await Scheduler.CheckExists(jobKey))
                {
                    await Scheduler.PauseJob(jobKey);

                    await Scheduler.DeleteJob(jobKey);
                }
                Assembly assembly = Assembly.LoadFile(JobAssemblyName);
                Type     jobType  = assembly.GetType(JobNamespaceAndClassName);
                //var jobType = Type.GetType(JobNamespaceAndClassName + "," + JobAssemblyName);
                if (jobType == null)
                {
                    result.ResultCode = -1;
                    result.ResultMsg  = "系统找不到对应的任务,请重新设置";
                    return(result);//出现异常
                }
                IJobDetail job = JobBuilder.Create(jobType)
                                 .WithIdentity(jobKey).UsingJobData("ServerName", Scheduler.SchedulerName)
                                 .Build();
                ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                                       .StartAt(starRunTime)
                                       .EndAt(endRunTime)
                                       .WithIdentity(JobName, JobGroup)
                                       .WithCronSchedule(CronExpress)
                                       .Build();
                await Scheduler.ScheduleJob(job, trigger);

                if (!Scheduler.IsStarted)
                {
                    await Scheduler.Start();
                }
                return(result);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, nameof(AddJobAsync));
                result.ResultCode = -4;
                result.ResultMsg  = ex.ToString();
                return(result);//出现异常
            }
        }
Example #26
0
        public void TestQuartz558()
        {
            CronTriggerImpl trigger = new CronTriggerImpl();

            trigger.Name  = ("test");
            trigger.Group = ("testGroup");
            ICronTrigger trigger2 = (ICronTrigger)trigger.Clone();

            Assert.AreEqual(trigger, trigger2, "Cloning failed");
        }
        /// <summary>
        /// 创建CronTrigger
        /// </summary>
        /// <returns></returns>
        private ICronTrigger CreateCronTrigger(TaskJobInfo taskJob)
        {
            var          scheduleBuilder = CronScheduleBuilder.CronSchedule(taskJob.CronExpression);
            ICronTrigger trigger         = (ICronTrigger)TriggerBuilder.Create()
                                           .WithSchedule(scheduleBuilder.WithMisfireHandlingInstructionDoNothing())
                                           .WithIdentity(taskJob.JobName)
                                           .Build();

            return(trigger);
        }
Example #28
0
 /// <summary>
 /// 定时执行任务
 /// </summary>
 /// <typeparam name="T">实体类型</typeparam>
 /// <param name="cronExpression">参数顺序:0 0 9,16 * * ?,参数说明:秒|分|时(多个时间用逗号分隔)|每月中哪一天|月|每周中的哪一天|年</param>
 /// <param name="jobKey">作业唯一标识</param>
 public static void Task <T>(string cronExpression, string jobKey) where T : IJob
 {
     ExecuteScheduler <T>(jobKey, cronExpression, QuartzTypeEnum.Task, () =>
     {
         ICronTrigger iTrigger = (ICronTrigger)TriggerBuilder.Create()
                                 .WithCronSchedule(cronExpression)
                                 .Build();
         return(iTrigger);
     });
 }
Example #29
0
        private void UpdateDetails(ICronTrigger trigger)
        {
            var ctrl = new CronTriggerDisplay(trigger)
            {
                Dock = DockStyle.Fill
            };

            pnlDetails.Controls.Clear();
            pnlDetails.Controls.Add(ctrl);
        }
        public void TestRun()
        {
            Debug.WriteLine("-Scheduling Jobs-");
            //DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(null, 15);
            IJobDetail     jobDetail   = JobBuilder.Create <SimpleJob>().WithIdentity("job1", jobGroup).Build();
            ICronTrigger   cronTrigger = (ICronTrigger)TriggerBuilder.Create().WithIdentity("trigger1", jobGroup).WithCronSchedule("0/2 * * * * ?").StartNow().Build();
            DateTimeOffset?ft          = _scheduler.ScheduleJob(jobDetail, cronTrigger).Result;

            Debug.WriteLine($"{jobDetail.Key} has been scheduled to run at {ft} and repeat based on expression: {cronTrigger.CronExpressionString}");
            this.Start();
        }
Example #31
0
 public static void AssignQuartzTrigger(this CronTriggerImpl cronTrigger, ICronTrigger trigger) {
     cronTrigger.MisfireInstruction = trigger.MisfireInstruction;
     cronTrigger.CronExpressionString = trigger.CronExpressionString;
     cronTrigger.TimeZone = TimeZoneInfo.FindSystemTimeZoneById(trigger.TimeZone.ToString());
 }
Example #32
0
 public CronTriggerDetailDto(ICronTrigger trigger, ICalendar calendar) : base(trigger, calendar)
 {
     CronExpression = trigger.CronExpressionString;
     TimeZone = new TimeZoneDto(trigger.TimeZone);
 }
 public CronTriggerDisplay(ICronTrigger trigger)
     : this()
 {
     _Trigger = trigger;
 }