(本文档仅供参考)
Smartbi如何在计划任务中调用外部程序,定时执行特定的任务呢,比如每天定时备份Smartbi的知识库。其实很简单,只需要在计划任务模块新建一个“定制”类型的任务,写一段代码调用外部程序即可。下面就以“每天定时备份Smartbi知识库”为例,详细说明操作过程。
1. 写一个批处理文件smartbi-repo-backup.bat,调用MySQL的命令行工具,对Smartbi的知识库进行备份。将该批处理文件保存到服务器上指定目录下,比如放到D:\盘根目录下。该文件内容如下。
@echo off REM 获取系统时间,生成导出文件名 set h=%time:~0,2% set h=%h: =0% set sqltime=%date:~0,4%%date:~5,2%%date:~8,2%%h%%time:~3,2%%time:~6,2% set sqlfile=smartbi-repo-%sqltime%.sql set sqlpath=d:\smartbi-repo-backup REM 从MySQL备份数据文件 %sqlpath:~0,2% cd %sqlpath% set mysqlpath=D:\Smartbi\MySQL\bin "%mysqlpath%\mysqldump" -P 6688 -u admin -padmin smartbi > %sqlfile% echo OK!
2. 在Smartbi“定制管理 -> 计划任务”资源树下,点击“新建任务”,新建一个计划任务。
3. 任务类型选择“定制”,然后在“自定义设置”部分输入如下代码。点击右下角的“保存”按钮,然后“关闭”该页面。
importPackage(Packages.java.io); importPackage(Packages.java.lang); var r = Runtime.getRuntime(); var p = r.exec("cmd.exe /c D://smartbi-repo-backup.bat"); // 要执行的外部程序路径及名称 var errReader = new BufferedReader(new InputStreamReader(p.getErrorStream(), "GBK")); var inputReader = new BufferedReader(new InputStreamReader(p.getInputStream(), "GBK")); var t1 = new Thread(new Runnable({ run : function() { var line = null; while ((line = errReader.readLine()) != null) { System.out.println(line); } } })); var t2 = new Thread(new Runnable({ run : function() { var line = null; while ((line = inputReader.readLine()) != null) { System.out.println(line); } } })); t1.start(); t2.start(); p.waitFor(); // 等待外部程序执行完毕再往下执行 System.out.println("Finished!");
4. 接着“新建计划”,设置每天早上5点定时执行上述任务,设置如下图。
5. 至此,全部完成。该计划任务会每天定时备份知识库,服务器上指定目录下备份的脚本文件如下图。
评论
杨礼显 发表:
在批处理文件中,经常需要将操作系统的当前路径,切换到 bat 文件所在的目录下。解决方法是,在 bat 文件中添加如下代码。