Linux下定时执行Kettle任务

一、环境

  1. linux系统
  2. Java jdk环境

二、步骤

  1. 解压kettle zip包,执行命令 unzip kettle.zip
  2. 进入解压目录下,执行chmod +x *.sh 赋予 . sh文件以执行权限
  3. 创建kettle任务转换文件(一般在windows上创建完成后上传到linux服务器,以 .ktr 结尾),测试转换,确保能正确执行(以下以 linux_kettle_timer_test.ktr 为例)。
  4. 编写 sh 脚本
    如:执行 vim kettle_timer.sh(以下以 /data/ktr/kettle_timer.sh 为例)
    输入内容:
export JAVA_HOME=/usr/java/jdk1.8.0_121
export JRE_HOME=/usr/java/jdk1.8.0_121/jre  
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH  
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH  
/data/kettle/data-integration/pan.sh -file=/data/ktr/linux_kettle_timer_test.ktr > /data/ktr/log.txt

    :前4行为Java环境变量;后一行目录为需要执行的程序(pan.sh执行ktr转换,kitchen执行kjb任务) 需要执行的ktr文件 > 输出的日志文件
    5. 在当前目录下执行chmod +x *.sh 赋予 . sh文件以执行权限
    6. 执行 kettle_timer.sh 脚本

三、配置定时任务

1.查看crontab 状态
service crond status

2.修改定时任务文件
crontab -e
添加kettle任务运行计划,如:
*/5 * * * * /data/ktr/kettle_timer.sh
上面语句表示每五分钟执行一次 /data/ktr/kettle_timer.sh

Linux crontab 命令

  • 语法:crontab [ -u user ] { -l | -r | -e }
  • 说明:
          crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
          -u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
          -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
          -r : 删除目前的时程表
          -l : 列出目前的时程表
  • 时间格式如下:
    f1 f2 f3 f4 f5 program
    • 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
    • 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
    • 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
    • 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
    • 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推
*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 7) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

3.重启定时任务服务
systemctl restart crond.service

四、验证

查看执行kettle_timer.sh输出的日志文件(tail /data/ktr/log.txt)进行验证。

五、可能遇到的问题

/data/ktr/log.txt 日志输出错误:

*******************************************************************************
*** Karaf Instance Number: 1 at /data/pdi/data-integration/./system/karaf/ ***
***   caches/pan/data-1                                                      ***
*** FastBin Provider Port:52901                                             ***
*** Karaf Port:8802                                                         ***
*** OSGI Service Port:9051                                                  ***
*******************************************************************************
十二月 10, 2020 11:40:07 上午 org.apache.karaf.main.Main$KarafLockCallback lockAquired
信息: Lock acquired. Setting startlevel to 100
C:\Users\swan\Downloads\pdi-ce-7.1.0.0-12\data-integration\system\karaf/deploy does not exist, please create it.
Root path does not exist: /data/pdi/data-integration/C:\Users\swan\Downloads\pdi-ce-7.1.0.0-12\data-integration\system\karaf/deploy
*ERROR* [org.osgi.service.cm.ManagedService, id=253, bundle=49/mvn:org.apache.aries.transaction/org.apache.aries.transaction.manager/1.1.1]: Unexpected problem updating configuration org.apache.aries.transaction
java.lang.ExceptionInInitializerError
	at org.apache.aries.transaction.internal.TransactionManagerService.<init>(TransactionManagerService.java:114)
	at org.apache.aries.transaction.internal.Activator.updated(Activator.java:63)
	at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:148)
	at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:81)
	at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1448)
	at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1404)
	at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:103)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.MissingResourceException: Can't find bundle for base name org.apache.aries.transaction.txManager, locale zh_CN
	at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
	at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
	at java.util.ResourceBundle.getBundle(ResourceBundle.java:1082)
	at org.apache.aries.util.nls.MessageUtil.createMessageUtil(MessageUtil.java:152)
	at org.apache.aries.util.nls.MessageUtil.createMessageUtil(MessageUtil.java:107)
	at org.apache.aries.transaction.internal.NLS.<clinit>(NLS.java:25)
	... 8 more

该错误是由于kettle工具从windows上移植到linux上启动报错: /data/pdi/data-integration/./system/karaf/caches/pan/data-1,删除caches文件,重新启动后即可。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值