2007-09-20

嵌在web app中的Quartz突然启动不了了

关键字: 嵌在web app中的Quartz
两个多月前,在部署于远程服务器上的Tomcat中的web app中嵌入了Quartz,让它每周日00:00:00执行一个Job,生成一个报表并通过Email发送给指定的收件人.连续几个星期下来,一切正常.而且每次我重启Tomcat后,在log中都有关于Quartz的记录:
[code]
...
Sep 13, 2007 2:26:23 AM org.apache.coyote.http11.Http11Protocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8080
2007-09-13 02:26:23,872 DEBUG SimpleThreadPool:564 - WorkerThread is shutting down
2007-09-13 02:26:23,873 DEBUG SimpleThreadPool:564 - WorkerThread is shutting down
2007-09-13 02:26:23,873 DEBUG SimpleThreadPool:564 - WorkerThread is shutting down
2007-09-13 02:26:23,874 DEBUG SimpleThreadPool:564 - WorkerThread is shutting down
2007-09-13 02:26:23,874 DEBUG SimpleThreadPool:564 - WorkerThread is shutting down
2007-09-13 02:26:23,912 INFO ShutdownHookPlugin:133 - Shutting down Quartz...
2007-09-13 02:26:23,913 INFO ShutdownHookPlugin:133 - Shutting down Quartz...
Sep 13, 2007 2:26:29 AM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Sep 13, 2007 2:26:29 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 863 ms
Sep 13, 2007 2:26:30 AM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
...
2007-09-13 02:26:32,483 DEBUG ConvertUtils:418 - Convert string '20' to class 'int'
2007-09-13 02:26:32,484 DEBUG ConvertUtils:426 - Using converter org.apache.commons.beanutils.converters.Integ
erConverter@1ce85c4
2007-09-13 02:26:32,485 DEBUG ManagerBase:627 - Registering Catalina:type=Manager,path=/,host=localhost
2007-09-13 02:26:32,486 DEBUG ManagerBase:650 - Force random number initialization starting
2007-09-13 02:26:32,487 DEBUG ManagerBase:511 - Opening /dev/urandom
2007-09-13 02:26:32,488 DEBUG ManagerBase:322 - Getting message digest component for algorithm MD5
2007-09-13 02:26:32,489 DEBUG ManagerBase:336 - Completed getting message digest component
2007-09-13 02:26:32,491 DEBUG ManagerBase:339 - getDigest() 3
2007-09-13 02:26:32,492 DEBUG ManagerBase:653 - Force random number initialization completed
2007-09-13 02:26:32,493 DEBUG ManagerBase:359 - Start: Loading persisted sessions
2007-09-13 02:26:32,494 DEBUG ManagerBase:369 - Loading persisted sessions from SESSIONS.ser
2007-09-13 02:26:32,495 DEBUG ManagerBase:383 - Creating custom object input stream for class loader
2007-09-13 02:26:32,497 DEBUG ManagerBase:413 - Loading 4 persisted sessions
2007-09-13 02:26:32,508 DEBUG ManagerBase:460 - Finish: Loading persisted sessions
2007-09-13 02:26:32,642 INFO QuartzScheduler:209 - Quartz Scheduler v.1.6.0 created.
2007-09-13 02:26:32,647 INFO JobInitializationPlugin:280 - Registering Quartz Job Initialization Plug-in.
2007-09-13 02:26:32,650 INFO ShutdownHookPlugin:128 - Registering Quartz shutdown hook.
2007-09-13 02:26:32,652 INFO RAMJobStore:141 - RAMJobStore initialized.
2007-09-13 02:26:32,653 INFO StdSchedulerFactory:1208 - Quartz scheduler 'TestScheduler' initialized from defau
lt resource file in Quartz package: 'quartz.properties'
2007-09-13 02:26:32,654 INFO StdSchedulerFactory:1212 - Quartz scheduler version: 1.6.0
...
[/code]
可是最近发现Job没有执行,而且启动日志中也没有上述信息了(Tomcat会经常被我重启).
更奇怪的是,本地的开发环境中Job可以正常执行,log中也有记录.代码和配置我都比较过,完全一致.

我试着在web.xml中把QuartzInitializer的启动延迟
[code]
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>
org.quartz.ee.servlet.QuartzInitializerServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
[/code]
本地仍然可以,可是远程还是不行.
难道是我重启远程Tomcat的次数太多,导致Quartz启动不了了?
可是关闭Tomcat的时候Quartz会做清理工作的呀:
[code]
INFO: Stopping Coyote HTTP/1.1 on http-8080
2007-09-14 03:45:24,186 INFO ShutdownHookPlugin:133 - Shutting down Quartz...
...
[/code]
有没有人遇到过类似的问题啊?
评论
eclipse2008 2007-11-04
e3002 写道
1,看看的buildpath中是否有重复的包
2,quartz的版本


帮看看我的那个问题是啥原因呢,谢谢
e3002 2007-11-04
1,看看的buildpath中是否有重复的包
2,quartz的版本
e3002 2007-11-04
1,看一下你的quartz版本,common-log版本是否符合啊
2,看看你的buildpath中是否有重复的包
eclipse2008 2007-11-03
请问一下,为什莫我修改了linux的系统时间以后,webapp的Quartz定时任务就不起作用了呢(生成报表),任务失效了,必须重新启动tomcat才能起作用
windows环境是没有问题的,大家谁遇到过这种情况
sam.ds.chen 2007-09-27
On Fri, 27 Sep 2007 14:35:36 +0800 "pikachu" wrote:
> 难道你就不能在生产环境下调试么?
根本不可能.production的server在美国,我能做的只是在上海"cvs commit",然后用puTTy登陆到那台服务器,执行"cvs update","ant","shutdown.sh","startup.sh"而已.
pikachu 2007-09-27
sam.ds.chen 写道
我一开始怀疑可能多个jar包中都有log4j.properties或log4j.xml
但是不明白的是,我开发环境和生产环境配置是一样的,最近没有更新配置,开发环境一直有Quartz的启动和关闭的log和Task执行的log,生产环境为什么突然没Quartz的log了呢?
不知道是去log4j还是去Quartz提FAQ...

既然定时任务正常执行了,只是没有log而已,这件事就先撂下了...

美国那边的Eric是个Linux高手,他建议我不要用Quartz,用at 或 crontab.
引用

On Thu, 20 Sep 2007 18:46:36 +0800 "Sam Chen" wrote:
> I met a very funny problem: Quartz doesn't start up
> now (I embedded Quartz into CTMS, to execute
> scheduled tasks, and it was working quite
> well during the past months)

Why aren't you using at(1) or crontab(1) for scheduled tasks? They are built into the OS and bullet proof. They are what I use for all system automation.

可是要让Java EE的web app和Linux交互,貌似有点麻烦.
这不是简单的让Linux的定时系统去执行一个"say hello"之类的任务,而是要在预设的时刻让web app做两件事情:生成报表 + 发送邮件.
利用at或crontab什么的调用Java类的某个方法? Is that possible?


最大的可能还是包冲突,特别是外部环境配置。比如OS下的classpath参数或者诸如此类的问题。

难道你就不能在生产环境下调试么?

用at或者cront不是个好办法,linux管理员和java开发人员的想法总是不一样的。
sam.ds.chen 2007-09-27
我一开始怀疑可能多个jar包中都有log4j.properties或log4j.xml
但是不明白的是,我开发环境和生产环境配置是一样的,最近没有更新配置,开发环境一直有Quartz的启动和关闭的log和Task执行的log,生产环境为什么突然没Quartz的log了呢?
不知道是去log4j还是去Quartz提FAQ...

既然定时任务正常执行了,只是没有log而已,这件事就先撂下了...

美国那边的Eric是个Linux高手,他建议我不要用Quartz,用at 或 crontab.
引用

On Thu, 20 Sep 2007 18:46:36 +0800 "Sam Chen" wrote:
> I met a very funny problem: Quartz doesn't start up
> now (I embedded Quartz into CTMS, to execute
> scheduled tasks, and it was working quite
> well during the past months)

Why aren't you using at(1) or crontab(1) for scheduled tasks? They are built into the OS and bullet proof. They are what I use for all system automation.

可是要让Java EE的web app和Linux交互,貌似有点麻烦.
这不是简单的让Linux的定时系统去执行一个"say hello"之类的任务,而是要在预设的时刻让web app做两件事情:生成报表 + 发送邮件.
利用at或crontab什么的调用Java类的某个方法? Is that possible?
pikachu 2007-09-26
是不是包冲突了?
sam.ds.chen 2007-09-26
Quartz的定时任务其实还是执行了(报表在每个周日零点成功生成并通过email发送),奇怪的就是以前在log中有记录,现在没有了(让我误以为Quartz歇菜了).
1. 我并没有修改log4j.properties.所以log4j对此事故完全没有责任.
2. 本地开发环境中log中一直有Quartz的记录.
3. 在本地开发环境调试时,每次跑到Quartz的log.info...时,会报log为null!不调试的话一切正常.Quartz太奇怪了.
4. 没办法,只好把自己的Task类代码中的log.info换成System.out.println, 才能让log记录执行任务的操作.
5. 似乎与Quartz相关的代码中log.info/warn/error/debug都不能输出到log.
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

sam.ds.chen
搜索本博客
博客分类
我的相册
04352697-7823-382a-9592-e177ec21889b-thumb
MyDesktop.zh
共 17 张
最近加入圈子
存档
最新评论