c# - Quartz.NET 在随机持续时间后停止触发

标签 c# cron scheduler quartz.net

我有 Quartz.NET 调度程序(在 Windows 服务内)每 15 分钟运行一次,使用 cron 表达式作为 0 0/15 * * * ?

它在随机时间段内运行良好,通常超过 2 天且不超过 5 天。

我的 log4net 记录器配置为每次触发调度程序时附加一行,这就是我知道它已停止的方式。

我检查了 Windows 事件查看器是否有任何未处理的异常,但一无所获。 Quartz.net 有什么办法可以找出里面出了什么问题吗?

最佳答案

我有一个类似的场景,运行了几个月都没有问题,所以我不知道你的场景出了什么问题。但是,Quartz.NET 使用我在我的应用程序中配置的通用日志记录,因此我可以为您提供我的相关配置部分,以便您可以为 Quartz.NET 配置日志记录。

首先:所需的配置部分:

<configSections>
  <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <sectionGroup name="common">
    <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
  </sectionGroup>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  ...
</configSections>

第二:我的 Quartz.NET 配置。我的工作商店是 SQL Server。

<quartz>
  <add key="quartz.scheduler.instanceName" value="QuartzScheduler" />
  <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
  <add key="quartz.threadPool.threadCount" value="3" />
  <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
  <add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
  <add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
  <add key="quartz.jobStore.useProperties" value="true" />
  <add key="quartz.jobStore.dataSource" value="myDS" />
  <add key="quartz.dataSource.myDS.connectionString" value="Data Source=.;Initial Catalog=Development;Integrated Security=True" />
  <add key="quartz.dataSource.myDS.provider" value="SqlServer-20" />
</quartz>

最后是日志配置:

<common>
  <logging>
    <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net">
      <arg key="configType" value="INLINE" />
    </factoryAdapter>
  </logging>
</common>
<log4net>
  <appender name="RootAppender" type="log4net.Appender.RollingFileAppender">
    <file value="C:\Log\Service.log" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value=" dd-MM-yyyy" />
    <maxSizeRollBackups value="30" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="All" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss,fff} %-5level %property{UsnSearchKey} (%logger) %message%newline%exception" />
    </layout>
  </appender>
  <root>
    <appender-ref ref="RootAppender" />
  </root>
  <!-- Specify minimum logging level for Quartz logger. -->
  <logger name="Quartz">
    <level value="DEBUG" />
  </logger>
</log4net>

此配置应在 c:\Log 目录中创建一个 Service.log 文件,其中包含 Quartz.NET 的调试日志语句。

关于c# - Quartz.NET 在随机持续时间后停止触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24694953/

相关文章:

javascript - 从 Meteor 服务器插入数据库不起作用

JavaScript 无法在 IE8 中运行

c# - 如何添加到结构体数组中

c# - 如何在 xunit 中使用最小起订量测试返回 IEnumerable<model> 的异步任务<IActionResult>?

c# - 已具有此连接的打开的 DataReader

python - Crontab 不适用于 python

php - 如何在特定时间运行一个php文件?

hadoop - 如何在Hadoop中添加新的调度程序?

c# - 没有为此对象定义无参数构造函数 - Hangfire 调度程序

c# - : Azure service client and device client 之间的区别