请教关于Quartz/crontab/Timer定时执行任务的准确性

liuex 发布于 2012/03/20 18:50
阅读 1K+
收藏 1

项目中需要用到定时任务,并且对时间准确性要求比较高。

所谓的时间准确性是:例如我在00:00:30第一次启动了这个定时任务,任务本身执行时间大概5~120秒钟左右,并且我设置这个任务的执行频率是5分钟。

但是使用java.util.Timer的话,跑上十几天后,任务的触发时间可能变成了00:01:27执行了。。。

而且我发现使用linux/unix系统下的crontab调度的时候,也会出现类似的情况,quartz的还没测试过。

有人遇到过类似的问题吗?大家是怎么解决的呢

加载中
0
liuex
liuex
顶一下,有人有类似经验吗?
0
Andre.Z
Andre.Z

你那个5分是java定时器里面设定的间隔时间?
本身java这个时间就不是绝对精确的,5分偏差一点,时间一长,自然变这样。
量变引起质变。
每次也就5分上下一点点的时间,对于你的5分就那么重要?
linux里的crontab用*/5,我还没发现有偏差那么厉害的。

0
liuex
liuex

引用来自“Andre.Z”的答案

你那个5分是java定时器里面设定的间隔时间?
本身java这个时间就不是绝对精确的,5分偏差一点,时间一长,自然变这样。
量变引起质变。
每次也就5分上下一点点的时间,对于你的5分就那么重要?
linux里的crontab用*/5,我还没发现有偏差那么厉害的。

一个出帐程序,每半小时执行一次,平时误差一些没关系。

但是必须在月初的1日凌晨00:05:00之前把上个月的所有用户账单上传计费,上传晚了就会被计费解析为下个月的账单了。结果就是我们和计费账单对不上,而且用户投诉。。。

Andre.Z
Andre.Z
写个sh,crontab设定每月1号凌晨00:05之前执行一次,sh执行前先检测有没原先那个进程在跑,没的话,就跑一次。原先的sh也做个检测,不要两个一起跑。
0
y
yangyiqian
写个脚本定时与国际标准时间同步,就不会出现太大的误差了。
返回顶部
顶部