我正在使用Quartz.NET 2.3.2 - 带有ADOJobStore的集群模式。它有8个作业,每个作业都有一个简单的触发器。所有作业都配置了[DisallowConcurrentExecution]。
我面临的问题是 - 经过几个小时的运行(有时是30分钟),一些作业进入TRIGGER_STATE ERROR(查询QRTZ_TRIGGERS表),而不记录石英日志文件中的任何错误信息。 Pl找到下面的quartz.server.exe.config的相关部分。
目前还要隔离这个问题 - 我目前只从一个服务器运行Quartz(重新创建架构)。
添加更多信息 - 所有工作"执行"方法有一个主要的try-catch来防止任何异常到达Quartz-Core。如果必须改变,请告诉我。我一直在阅读关于使用" JobExecutionExecution"在Job.Execute捕获区域。我不确定它的用法。
<common>
<logging>
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net1213">
<arg key="configType" value="INLINE"/>
</factoryAdapter>
</logging>
</common>
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %l - %m%n"/>
</layout>
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %l - %m%n"/>
</layout>
</appender>
<appender name="QuartzInternalLog" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="Trace/QuartzInternalLogFile_%date{yyyyMMdd}.txt"/>
<appendToFile value="true"/>
<maximumFileSize value="1024KB"/>
<maxSizeRollBackups value="1000" />
<rollingStyle value="Size"/>
<datePattern value="yyyyMMdd" />
<staticLogFileName value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{HH:mm:ss} [%t] %-5p %c - %m%n"/>
</layout>
</appender>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="Log/ABCXYZIntService_%date{yyyyMMdd}.log" />
<appendToFile value="true" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="1MB" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
<staticLogFileName value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
</layout>
</appender>
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="admin@abc.com" />
<from value="admin@abc.com" />
<subject value="Sample Subject" />
<smtpHost value="smtp.abc.com" />
<bufferSize value="512" />
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="WARN"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<logger name="ErrorLogger">
<level value="All" />
<appender-ref ref="LogFileAppender" />
</logger>
<logger name="EmailLogger">
<level value="Error" />
<appender-ref ref="SmtpAppender" />
</logger>
<logger name="Quartz">
<level value="DEBUG" />
<appender-ref ref="QuartzInternalLog" />
</logger>
</log4net>
<!--
We use quartz.config for this server, you can always use configuration section if you want to.
Configuration section has precedence here.
-->
<quartz>
<add key="quartz.checkConfiguration" value="false"/>
<add key="quartz.server.serviceName" value="ABC"/>
<add key="quartz.server.serviceDisplayName" value="ABC"/>
<add key="quartz.server.serviceDescription" value="ABC"/>
<add key="quartz.scheduler.instanceName" value="ABCScheduler"/>
<add key="quartz.scheduler.instanceId" value = "AUTO"/>
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
<add key="quartz.threadPool.threadCount" value="10"/>
<add key="quartz.threadPool.threadPriority" value="Normal"/>
<add key="quartz.plugin.xml.type" value="Quartz.Plugin.Xml.XMLSchedulingDataProcessorPlugin, Quartz"/>
<add key="quartz.plugin.xml.fileNames" value="~/quartz_jobs.xml"/>
<add key="quartz.scheduler.exporter.type" value="Quartz.Simpl.RemotingSchedulerExporter, Quartz"/>
<add key="quartz.scheduler.exporter.port" value="555"/>
<add key="quartz.scheduler.exporter.bindName" value="QuartzScheduler"/>
<add key="quartz.scheduler.exporter.channelType" value="tcp"/>
<add key="quartz.scheduler.exporter.channelName" value="httpQuartz"/>
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"/>
<add key="quartz.jobStore.dataSource" value="default"/>
<add key="quartz.jobStore.tablePrefix" value="QRTZ_"/>
<add key="quartz.jobStore.clustered" value="true"/>
<add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.SimpleSemaphore, Quartz"/>
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz"/>
<add key="quartz.dataSource.default.provider" value="SqlServer-20"/>
<add key="quartz.jobStore.useProperties" value="true"/>
<add key="quartz.jobStore.selectWithLockSQL" value="SELECT * FROM {0} LOCKS UPDLOCK WHERE LOCK_NAME = @ lockName"/>
<add key="quartz.dataSource.default.connectionStringName" value="QuartzStore"/>
<add key="quartz.dataSource.default.connectionString" value="Data Source=MyServer;Initial Catalog=MyDB;User ID=test;Password=test"/>
</quartz>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
答案 0 :(得分:0)
我想出了这个问题。这个问题出现在我们的UAT环境中。在SIT环境中有另一个Quartz作业服务指向UAT环境的Quartz数据库。这可能会导致争用问题。
这个网址给了我一个提示 - http://forums.terracotta.org/forums/posts/list/4317.page