public QuartzSchedulerService() { var conStr = ConfigurationManager.ConnectionStrings["QUARTZNETJOBDB"]?.ConnectionString; try { NameValueCollection configuration = new NameValueCollection { { "quartz.scheduler.instanceName", "LocalServer" }, { "quartz.scheduler.instanceId", "LocalServer" }, { "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" }, //{ "quartz.jobStore.useProperties", "true" }, { "quartz.jobStore.dataSource", "default" }, { "quartz.jobStore.tablePrefix", "QRTZ_" }, { "quartz.dataSource.default.connectionString", conStr }, { "quartz.dataSource.default.provider", "SqlServer" }, //{ "quartz.threadPool.threadCount", "1" }, { "quartz.serializer.type", "binary" } }; configuration["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; configuration["quartz.threadPool.threadCount"] = "5"; configuration["quartz.threadPool.threadPriority"] = "Normal"; configuration["quartz.plugin.recentHistory.type"] = "Quartz.Plugins.RecentHistory.ExecutionHistoryPlugin, Quartz.Plugins.RecentHistory"; configuration["quartz.plugin.recentHistory.storeType"] = "Quartz.Plugins.RecentHistory.Impl.InProcExecutionHistoryStore, Quartz.Plugins.RecentHistory"; StdSchedulerFactory factory = new StdSchedulerFactory(configuration); scheduler = factory.GetScheduler().GetAwaiter().GetResult(); _timer = new Timer(30000); _timer.Elapsed += (sender, e) => { try { if (scheduler.IsStarted == false || scheduler.IsShutdown) { this.StartScheduler(); } #region FindErrorStateTriggers using (SqlConnection connection = new SqlConnection(conStr)) { var connectionOk = false; try { connection.Open(); if (connection.State == System.Data.ConnectionState.Open) { connectionOk = true; } } catch (Exception sqlCon) { this.StopScheduler(); } if (connectionOk) { var errorStateTriggers = TriggerManager.FindErrorStateTriggers(connection); if (errorStateTriggers.Count > 0) { foreach (var item in errorStateTriggers) { try { scheduler.ResumeTrigger(new TriggerKey(item.Key, item.Value)); } catch (Exception trgErr) { LoggerService.GetLogger("LOGIJMS").Log(new LogItem() { LoggerName = "LOGIJMS", Title = "Scheduler ResumeTrigger Error", Message = trgErr.Message, LogItemProperties = new List <LogItemProperty>() { new LogItemProperty("ServiceName", "JOB"), new LogItemProperty("AppName", "LogiJMS.TopshelfHost"), new LogItemProperty("ActionName", "ResumeTrigger") }, LogLevel = LogLevel.Error, Exception = trgErr }); } } } } } #endregion } catch (Exception expTmr) { LoggerService.GetLogger("LOGIJMS").Log(new LogItem() { LoggerName = "LOGIJMS", Title = "Timer Exception", Message = expTmr.Message, LogItemProperties = new List <LogItemProperty>() { new LogItemProperty("ServiceName", "JOB"), new LogItemProperty("AppName", "LogiJMS.TopshelfHost"), new LogItemProperty("ActionName", "Timer") }, LogLevel = LogLevel.Error, Exception = expTmr }); } }; } catch (System.Exception ex) { LoggerService.GetLogger("LOGIJMS").Log(new LogItem() { LoggerName = "LOGIJMS", Title = "Scheduler Service Create", Message = "Scheduler Service Create", LogItemProperties = new List <LogItemProperty>() { new LogItemProperty("ServiceName", "JOB"), new LogItemProperty("AppName", "LogiJMS.TopshelfHost"), new LogItemProperty("ActionName", "QuartzSchedulerService") }, LogLevel = LogLevel.Error, Exception = ex }); } }