From e1fa4a621d6f68e769f90aeb8687da804441e899 Mon Sep 17 00:00:00 2001 From: zhangqunshi Date: Fri, 21 Apr 2017 11:16:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BE=9B=E4=BA=86=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=89=A7=E8=A1=8CLinux=20Shell=E5=91=BD=E4=BB=A4=E7=9A=84?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=99=A8=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E4=B8=BAshellJobHanlder=EF=BC=8C=E5=85=B7=E4=BD=93?= =?UTF-8?q?=E7=9A=84Shell=E5=91=BD=E4=BB=A4=E5=A1=AB=E5=86=99=E5=88=B0?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=9A=84"=E6=89=A7=E8=A1=8C=E5=8F=82?= =?UTF-8?q?=E6=95=B0"=E4=B8=8A=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/jobhandler/ShellJobHandler.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/ShellJobHandler.java 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); + } + } + +}