在linux环境下Kettle调度实现

9本文介绍使用shell调用kettle job实现数据调度功能。

主要功能:

1、通过crontab定时调度shell 
2、使用shell调用kettle job 
3、调度异常发送邮件预警

shell调度kettle job的脚本实现

基本步骤为 
1、创建extract文件夹,用于存放脚本&JOB配置文件 
2、创建extract_log文件夹,用于存放调度log 
3、在extract文件夹建立test.sh脚本 
4、在extract文件夹中建立test_list.txt用于配置需要调度的JOB名称

test.sh脚本如下:

#!/bin/bash

#判断日志文件夹是否存在,不存在则创建
#以天为单位保存日志
#log_date_dir=`date '+/%Y/%M/%D'`
log_date_dir=`date '+%Y%m%d'`

log_dir=/extract_log/$log_date_dir

#echo $log_dir

#判断日志文件目录是否存在
if [ -d $log_dir ];then

echo $log_dir exists!

else
#日志目录不存在则创建
mkdir $log_dir

fi
#循环执行转换JOB

#进入项目文件夹
cd  /extract

#循环读取JOB名称 并执行,按行读取
#extratc_list.txt中为要执行的JOB名,一行一个,如有新增JOB配置该文件即可
for line in `cat extract_list.txt`

do
   #echo $line

#执行读取到的JOB,需配置连接kettle的用户名 密码,同事指定日志存储位置
   sh /tools/data-integration/pan.sh -rep kettle_zs -user user_test -pass pass_test -trans $line -level Basic>$log_dir/$line".log"
   #判断执行是否出错,如果出错中午发送邮件
   if [ "$?" != "0" ];then
      echo "erro!"

      echo "##########log_msg######################"
      #将报错的的job名称放入log_msg.py文件,用于发送邮件用
      echo sub_msg=\"$line\">/tools/project/log_msg.py
      #将报错的的job日志追加至log_msg.py文件,用于发送邮件用
      echo con_msg=\"$log_dir/$line".log"\">>
      /tools/project/log_msg.py
      #调用发邮件程序,python实现
      python /mail/sendmail.py
   else
      echo "success!"
   fi
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

python发送邮件的实现

创建mail文件夹,在文件加中创建sendmail.py、log_msg.py文件 
sendmail.py实现邮件发送功能 
log_msg.py即上文shell中提到的文件,用于存放报错信息用于发送邮件

#sendmail.py实现
# -*- coding: UTF-8 -*-
import smtplib
import socket
import log_msg
#from proper import list
from email.mime.text import MIMEText


#邮件服务配置
mail_host="smtp.exmail.qq.com"
mail_user="test@xqq.com" 
mail_pass="test_1234"

def send_mail(to_list,sub,content):
     host_name = socket.gethostname()
     send_from = socket.gethostbyname(host_name)
     #定义发件人
     me=mail_user

     #指定邮件内容 样式 
     msg = MIMEText(content,_subtype='plain',_charset='utf-8')   
     #指定邮件标题   
     msg['Subject'] = sub   #+"send from:"+send_from
     #指定发件人      
     msg['From'] = me
     #指定收件人      
     msg['To'] = ";".join(to_list)
     try:          
         server = smtplib.SMTP()          
         server.connect(mail_host)
         server.login(mail_user,mail_pass)          
         server.sendmail(me, to_list, msg.as_string())          
         server.close()          
         return True      
     except Exception, e:          
         print str(e)          
         return False
if __name__ == '__main__':

    mailto_list=["test1@qq.com","test2@qq.com","test3@qq.com"]

    v_sub='erro:from 192.168.168.1-'+log_msg.sub_msg
    f = open(log_msg.con_msg,'r')
    v_content = f.read()
    f.close()
    if send_mail(mailto_list,v_sub,v_content):
        print "success!"
        print log_msg.sub_msg
        print log_msg.con_msg
    else:
        print "failed!"  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

调度定时脚本

#编辑crontab 每天8:30执行该调度
30 08 * * * sh /extract/test.sh
  • 1
  • 2

以上为完成流程,实现了定时调度kettle job,并实现调度异常时,实现邮件预警功能。

主要使用内容为:shell、python、kettle、crontab

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值