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

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="[email protected]" 
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=["[email protected]","[email protected]","[email protected]"]

    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!"  

调度定时脚本

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

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

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

你可能感兴趣的:(DW系列)