Java对Azkaban的流进行设置定时

代码如下:

public class CurlToAzkaban{
 public static void scheduleExecute(String flow, String cronExpression) throws IOException {
    //0 23/30 5,7-10 ? * 6#3
       // String command = "bash /Users/peilongcheng/gitcode/GitAzkaban/src/main/java/com/maihaoche/baiyan/shell/azkaban_schedule.sh  " +flow +" \""+cronExpression+"\" "+CurlToAzkaban.getAuthenticate();

        Process process = null;
        Runtime runTime = Runtime.getRuntime();
        //这里用commands是为了解决空格问题
        String[] commands = new String[]{"/Users/peilongcheng/gitcode/GitAzkaban/src/main/java/com/maihaoche/baiyan/shell/azkaban_schedule.sh",flow,cronExpression,CurlToAzkaban.getAuthenticate() };
        process = runTime.exec(commands);
        try {
            process.waitFor();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 定义shell返回值
        StringBuffer result = new StringBuffer();

        // 获取shell返回流
        BufferedInputStream in = new BufferedInputStream(process.getInputStream());
        // 字符流转换字节流
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        // 这里也可以输出文本日志
        String lineStr = null;
        while ((lineStr = br.readLine()) != null) {
            result.append(lineStr + "\n");
        }
        // 关闭输入流
        br.close();
        in.close();
        System.out.println(result);
        if(result.toString().contains("success"))
        System.out.println("Schedule " + flow + " Success!!!");
        else System.out.println("Schedule " + flow + " Failed!!!");
    }

    public static void main(String args[]) throws IOException {
    CurlToAzkaban.scheduleExecute("b","0 */5 * * * ?");
    }
}

shell脚本如下:

#!/bin/bash
curl -k -d ajax=scheduleCronFlow -d projectName=ODPS -d flow="$1" --data-urlencode cronExpression="$2"  -b "azkaban.browser.session.id=$3" http://localhost:8081/schedule

难点在于

  • 1.如何传递给shell带空格的字符串
  • 2.如何避免*被转义(在shell引用对地方加双引号)

猜你喜欢

转载自www.cnblogs.com/WinseterCheng/p/9318674.html