Winodw调度bat脚本启动kettle调度不弹命令窗口实现
Winodw执行计划调度存在的问题:
1)重复调度只支持分钟级别的,无法达到秒级
2)老是弹出cmd命令执行窗口
实际应用中,很多调度需要20s或者30s跑一次调度,同时调度又很多,满屏的cmd窗口,看着都烦。
改进:
①满足秒级别调度:在bat文件中使用循环达到效果,每一次循环等待20s(自定义时间)后再执行下一个调度
②消除cmd窗口:新建vbs文件,在vbs文件中调度bat文件
具体案例如下:
job_clearing_settlement.bat文件内容:
:loop @echo off @set "today_date=%date:~-10%" @set "today=%today_date:/=%" @set today_fmt=%today:~-4,4%%today:~-8,2%%today:~-6,2% set hh=%time:~0,2% if /i %hh% LSS 10 (set hh=0%time:~1,1%) set today_time=%today_fmt%%hh%%time:~3,2%%time:~6,2% set rep_name=lzsn_mex_daily_business set job_name=job_clearing_settlement set panpath=C:\ETL\kettle\data-integration set logpath=C:\ETL\log\%today_fmt%\%rep_name%\%job_name% if not exist %logpath% ( md %logpath% ) echo start the job ........................................... call %panpath%\kitchen.bat -rep:%rep_name% -user:admin -pass:admin -dir:/job/output/ -job:%job_name% -logfile=%logpath%\%job_name%_%today_time%.log -level:Basic echo finish the job........................................... TIMEOUT /T 30 goto loop
备注:TIMEOUT /T 30 是等待30s,可以在cmd窗口执行下试试效果。
job_clearing_settlement.vsb文件内容:
Set shell = Wscript.CreateObject("WScript.Shell") a = shell.run ("C:\ETL\bat\javaapi\job_clearing_settlement.bat",0)
然后执行运行job_clearing_settlement.vsb即可。
也可以在window执行计划中创建任务(只运行一次,不要重复执行)即可。
从日志可以看到,调度正常哦
存在的问题:如何停止这个调度呢?目前只能通过杀死进程方式,但是调度这么多,怎么找到该停止的进程并kill掉呢? 这个跟Linux还有点区别,再研究研究,后续跟进....