windows定时任务准点运行kettle转换、作业等

2年前 (2022) 程序员胖胖胖虎阿
309 0 0

一、背景历史:

前两天工作中,项目经理要求使用kettle定时作业做转换,每小时第30分钟转换同步一次,那简单啊,我在第30分钟启动作业任务,并设置每60分钟跑一次,这样他就每小时的第30分会自动转换同步,两分钟成功满足经理需求,愉快至极

还没高兴两天呢,被了,经理问我:“数据怎么没有在每小时第30分同步啊?”,我当时就想都没想说,估计机器卡了,任务没起来,然后我就去看任务,在正常运行啊,我又看日志,我懵了

经过几亿脑细胞消耗,kettle按分钟定时调度启动转换文件机制:一天24小时,那么就有48个30分钟,每个30分钟是1/48,也就是个无限小数

windows定时任务准点运行kettle转换、作业等

按照四舍五入,就是0.021,数据不精准,有0.001左右误差,这点误差,在你每次定时任务启动时,定时的时间就会往后延迟几秒,每次启动都往后延迟几秒,结果几天后,就会延迟的不是每小时第30分钟执行作业了,会第31分,32分,33分随着时间一直往后延迟,最后出现严重数据同步问题,就等着被领导骂吧

那么怎么才能避免这种情况呢,怎么才不会被领导骂,要记得,规则是人定的,人也可以改规则,计算机程序是死的,人是灵活的。没有计算机做不到了,只是操作计算机的人不行,哈哈

教程开始

版本信息

Kettle:version7.1

Java1.8

一、首先编写kitchen.bat脚本文件名字随意,文件后缀.bat不能变

 D:

cd D:\kettle\pdi-ce-7.1.0.0-12\data-integration

pan.bat /file D:\kettle\数据抽取\数据中台\四地市通用模板1.7.4_0510.ktr  /level:Basic>D:\kettle\JOB.log

windows定时任务准点运行kettle转换、作业等

 

二、再创建个JOB.log存放日志的空文件 (脚本和log文件存储位置随便放,能记住在哪就行,后边会用到)

windows定时任务准点运行kettle转换、作业等

 

顺便解释一下:

D:   是你kettle存放的某盘

  1. 首先cd 是进入到kettle安装执行文件目录下 
  2. pan.bat /file后边写的是你转换文件(.ktr)目录路径
  3. /level:Basic> 后边是你刚创建的job.log文件位置

注意:

如果你是要调度作业文件(.kjb),写的kitchen.bat脚本中pan.bat命令参数换成kitchen.bat

在你保存kitchen.bat时,选择ANSI编码格式,其他的会有乱码情况发生

windows定时任务准点运行kettle转换、作业等

三、完成kitchen.bat脚本以后,双击测试一下会跳出cmd命令窗口,此时打开JOB.log日志记录,会发现已经在执行作业了,等待完成以后,cmd窗口会自动关闭。接下来就是Windows的定时任务来管理调度bat脚本了

 windows定时任务准点运行kettle转换、作业等

 

四、windows下建立执行任务

打开控制面板--管理工具--任务计划程序

windows定时任务准点运行kettle转换、作业等

打开右侧的创建基本任务,填写作业名称,然后下一步打开触发器:

windows定时任务准点运行kettle转换、作业等

 打开触发器,根据自己的需求选择执行频率,然后下一步打开具体的设置:

windows定时任务准点运行kettle转换、作业等

根据需求,每天几点开始触发任务,就是这个任务每天几点开始跑

(如果一天想让任务跑多次,后边有具体设置教程)

windows定时任务准点运行kettle转换、作业等

 

打开操作.,下一步打开具体设置(选择需要执行的bat脚本就是你创建的.bat脚本文件路径),下一步完成

 windows定时任务准点运行kettle转换、作业等

 windows定时任务准点运行kettle转换、作业等

 至此,Windows计划任务调度kettle作业完成

有人要急了,骂我傻,脑子null了,这不跟kettle创建定时作业一样嘛,这方法还麻烦,并且一天只能定时启动一次。

Windows万能的程度当然不可能一天只能启动一次啊,回到文章开头问题,我要怎么才能每天每小时第30分启动我的转换任务呢,并且每次启动时间还不会往后推迟

继续往下看

五、补充:(每天多次定时调度启动转换任务):

上边的设置每天只会定时调度一次转换任务,下面内容就是怎么设置一天多次定时调度

找到你刚创建的定时调度任务位置,右键打开属性

 windows定时任务准点运行kettle转换、作业等

 进入属性后选择触发器,再编辑任务,里边有高级设置,可以根据需求进行每天多次启动任务了

windows定时任务准点运行kettle转换、作业等

 看完最后一张图,是不是就明白了

我把这个任务触发时间设置成每天凌晨00:30:00开启,每60分钟执行一次kettle定时转换脚本任务,这样每小时的第三十分钟给数据做转换的需求就实现了,并且时间还不会往后延迟

之所以Windows定时任务每次启动时间不会延迟,是因为Windows底层功能实现逻辑不一样,Windows是根据时间启动的,就是说时间只要到你指定的时间,它就在这个时间准时启动,但kettle不一样,kettle是基于java的,也就可以想象下开发人员在开发这个功能时,想的是分钟就按照一天24小时的比例来进行计算,这样的算法会有无限小数存在,那就给他四舍五入嘛,这也就造成了算法不精准,导致你每次启动的时间都会往后延迟,最终被领导怼

希望你们用不到这个,毕竟也不是每个领导都会要求你们的数据通过kettle进行转换,更不会要求每个小时第30分钟转换同步一次,哈哈

对了,我这个方法有一个小BUG,不晓得你们发现没,我已经想到解决办法了,但没必要修改,领导不怼我就行了,哈哈

有更好方法的大牛,十分希望您在评论区发言,最后希望你们干啥啥顺利,世间永无bug

版权声明:程序员胖胖胖虎阿 发表于 2022年11月12日 上午12:24。
转载请注明:windows定时任务准点运行kettle转换、作业等 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...