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