作业调度与自动化
作业调度:将不同程序组成在一起成为一个作业集(job),并为每个作业分配必要的资源,调度它们的执行,以便在一定时间内完成该作业集。
自动化与作业调度算法相结合,顾名思义,可以准确、快速、智能实现该作业调度。接下来我将讨论如何在Linux和Windows环境下用Kettle实现这种方式:
Windows创建定时任务+bat
以Kettle9.0版本为例,进入其根目录发现,有两个可以实现KJB的脚本:
这两个脚本就是分别在Windows和Linux下执行的批处理文件。在Windows中,我们还要手动创建一个批处理脚本,且该脚本要调度Kettle目录中的Kitchen.bat来执行我们想要的KJB,该批处理脚本如下:
rem 进入 Kitchen.bat所在目录,如果是在Linux下执行,则进入Kitchen.sh
D:
rem 作业(job)文件路径和日志文件路径
cd D:\pdi_ce_9.0.0.0_423
rem 调动kitchen.bat,执行job,并写入日志,若是在Linux环境下,则将下面的kitchen.bat更改为kitchen.sh
kitchen.bat /file:C:\Users\laptop\Desktop\Test.kjb /level:Basic>>D:\pdi_ce_9.0.0.0_423\log\kettle_%date:~0,4%%date:~5,2%%date:~8,2%.log
rem 设置完作业的路径后,level设置日志等级,并重定向该日志路径,Windows下手动创新,Linux下不用
注意:在Windows中要手动创建该脚本运行的log目录,并使该KJB重定向到该log目录。
以上就是在Windows中自动化实现作业调度的第一步——创建KJB,并用Kitchen.bat批处理该KJB,接着我们需要处理第二步——自动化:
按WIN键打开Windows管理工具,在目录中找到并打开任务计划程序,接着在右边点击创建基本任务:
按照步骤以此填充该任务的名字,以及该程序执行的时间、次数、位置,最后点击完成:
Linux crontab+shell
首先我们要明白一个用来定期执行程序的Linux shell——crontab,该命令的语法简要叙述如下:牢记分 时 日 月 周——>* * * * * 需要执行的脚本路径。例如,设置每2分钟重启防火墙命令:
*/2 * * * * systemctl restart firewalld
如果我们想查看该命令的执行情况,可以使用以下命令:
crontab -l:列出当前所有作业
crontab -e:编辑当前用户的计划任务
crontab -r:删除当前作业
cat /var/log/cron:查看Linux中默认crontab设置作业调度的执行日志目录
其他有关crontab的语法可以用命令crontab -man查看帮助手册
综上所述,我们只需要将上面在Windows中编辑的Kitchen.bat做相关修改,使其在Linux中运行,并用crontab进行自动化调度即可。
在Linux中编辑该Kitchen.sh脚本如下:
#!bin/bash
# 进入 Kitchen.sh所在目录
D:
# 作业(job)文件路径和日志文件路径
cd D:\pdi_ce_9.0.0.0_423
# 执行kitchen执行job,并写入日志
kitchen.sh /file:C:/opt/test.kjb /level:Basic>>/opt/logs\kettle_%date:~0,4%%date:~5,2%%date:~8,2%.log