Kettle做定时任务有两种方式
第一种是kettle自带的Start控件,但这种方法有一个很明显的不足,就是这种方法需要kettle程序包必须一直运行,否则失效,如果一直运行,会对系统造成一种浪费,并且会存在很多的不确定性;
第二种是使用系统的定时功能。使用Kitchen、Pan命令编写bat、sh脚本,然后使用windows任务计划或者linux的crotab实现定时执行执行脚本。
(一)Start控件执行定时任务
我们需要建立一个job,来让转换定时执行。
操作步骤
1、运行软件,进入主界面。点击左上角的 文件 → 新建 → 作业(J)新建一个作业(job),并保存,作业的后缀名为kjb。
2、点击面板左侧的 核心对象 ,选择 通用文件夹下的 START 和 转换 并把它拖到右侧的编辑区中,按住 shift 画线连接“START” 和“转换”。
3、双击编辑区的“START”图标,设置定时任务。记住勾选重复选项,不勾选,任务只会执行一次。
4、双击编辑区的“转换”图标,设置要定时执行的转换。
5、点击“Run”,选择“本地执行”,点击“执行”来执行这个转换。
6、等待设置的间隔时间后,正确执行效果如图
(二)系统定时执行脚本
前面我们介绍了 Kettle的Spoon的转换和作业定时任务GUI设计方式以及运行,但是在实际应用中,我们需要计划任务是在服务器后台运行。
首先我们需要了解Kettle的Kitchen和Pan
- Kitchen——作业(job)执行器 (命令行方式)
- Pan——转换(trasform)执行器 (命令行方式)
下面我们将重点讲解经常会用到的作业执行器 Kitchen.bat。参数项使用 /rep:参数值 或者 -rep=参数值 这两种方式都可以。
Kitchen 参数说明:
-rep:Repository name 任务包所在存储名
-user:Repository username 执行人
-pass:Repository password 执行人密码
-job:The name of the job to launch 任务包名称
-dir:The directory (don’‘t forget the leading / or )
-file:The filename (Job XML) to launch
-level:The logging level (Basic, Detailed, Debug, Rowlevel, Error, Nothing) 指定日志级别
-log:The logging file to write to 指定日志文件
-listdir:List the directories in the repository 列出指定存储中的目录结构。
-listjobs:List the jobs in the specified directory 列出指定目录下的所有任务
-listrep:List the defined repositories 列出所有的存储
-norep:Don’'t log into the repository 不写日志
Windows编写Bat脚本文件
这个前提是首先形成一个job,也就是kettle的kjb,有了这个才能继续下去;有了kjb文件后,形成批处理文件
1.新建一个bat文件,命名(自己定义一个名称就行)JOB.bat,然后编辑,输入内容如下:
:: Kitchen.bat所在路径盘符
D:
:: Kitchen.bat所在目录
cd D:\应用软件\Kettel数据工具\kettle免安装环境包\kettle-7.0.0.0-25免安装版\data-integration
:: 作业(job)文件路径和日志文件路径
:: 执行kitchen执行job,并写入日志
kitchen.bat /file:G:\kettle工具缓存\3.作业\2-修改项目上报的状态.kjb /level Basic>>G:\kettle工具缓存\5.log\fjzx_%date:0,4%%date:5,2%%date:~8,2%.log注意:确保路径的正确性。
windows bat文件中注释符为::
使用notepad编辑时,记得编码改为ANSI编码,否则会乱码,文件无法执行
2、双击JOB.bat,即可运行
3、后台运行脚本文件
我们已经建立了命令行运行的bat文件,并且已经可以正确执行我们的ETL任务了,但是现在我们在运行bat后,桌面上面会一直存在一个控制台的窗口,我们可以使用bat命令中的隐藏窗口的命令。
修改我们的JOB.bat文件
::隐藏命令行窗口
@echo off
if “%1” == “h” goto begin
mshta vbscript:createobject(“wscript.shell”).run(“%~nx0 h”,0)(window.close)&&exit
:begin
:: Kitchen.bat所在路径盘符
D:
:: Kitchen.bat所在目录
cd D:\应用软件\Kettel数据工具\kettle免安装环境包\kettle-7.0.0.0-25免安装版\data-integration
:: 作业(job)文件路径和日志文件路径
:: 执行kitchen执行job,并写入日志
kitchen.bat /file:G:\kettle工具缓存\3.作业\2-修改项目上报的状态.kjb /level Basic>>G:\kettle工具缓存\5.log\fjzx_%date:0,4%%date:5,2%%date:~8,2%.log
在此双击job.bat运行,我们将不会再看到控制台窗口继续保留在桌面上,并且等待设置的间隔时间后,我们可以看到日志文件记录。
Windows定时执行Bat脚本
(1)写好bat批处理文件后,加到计划任务中。在windows的搜索栏中,搜索“任务计划”(不同版本不太一样),如图
(2)点击程序菜单项的操作,选择创建任务;点击常规,在名称后面输入任务名称,如果想限制用户执行,可点击更改用户或组进行限定。再选择用户是否登录时运行。
(3)点击触发器选项卡,点击新建,弹出新建触发器,可以设置任务循环周期时间,按照实际需求进行设定;上面的开始任务下拉框可以进行选择,一般我们选择按预定计划;接下来选择频率,如每天,每月,每周;这个和用kettle自带功能一样,不再叙述
(4)点击操作选项卡,点击左下角新建,弹出新建操作,点击浏览。选择要执行的任务程序或文档,点击打开确定
(5)点击条件选项卡,还可以设置其它需求,比如计算机不空闲时停止等。点击设置,同样可以再根据需要勾先项目,最后按确定。
(6)返回任务计划程序界面,点击“任务计划程序库”,在中间把滚动条往下拉,就可以看到建立好的定时任务,如果想删除则双击该任务,在右下角点击删除即可。