diff --git a/xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/ShellJobHandler.java b/xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/ShellJobHandler.java new file mode 100644 index 00000000..f7321477 --- /dev/null +++ b/xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/ShellJobHandler.java @@ -0,0 +1,49 @@ +package com.xxl.job.executor.service.jobhandler; + +import com.xxl.job.core.handler.IJobHandler; +import org.springframework.stereotype.Service; +import com.xxl.job.core.handler.annotation.JobHander; +import java.io.InputStreamReader; +import java.io.LineNumberReader; +import java.util.Arrays; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 运行Linux Shell命令的任务处理器,注意shell命令以参数的形式传入到此处理器中。 + * + * @author zhangqunshi@126.com + */ +@JobHander(value = "shellJobHandler") +@Service +public class ShellJobHandler extends IJobHandler { + + private static transient Logger logger + = LoggerFactory.getLogger(ShellJobHandler.class); + + @Override + public void execute(String... params) throws Exception { + // 上层只传了一个参数,并没有分解 :( + if (params != null && params.length > 0) { + logger.info("Run command: " + Arrays.toString(params)); + } else { + throw new Exception("Shell command is required!"); + } + + String[] cmd = params[0].split(" "); //使用空格把命令字符串分解 + Process process; + process = Runtime.getRuntime().exec(cmd, null, null); + + InputStreamReader in = new InputStreamReader(process.getInputStream()); + LineNumberReader reader = new LineNumberReader(in); + + int exitCode = process.waitFor(); + logger.info("exit code: " + exitCode); + + String line; + while ((line = reader.readLine()) != null) { + logger.info(line); + } + } + +}