From 0aa06d1ae6b033815951733e9f620d4209847fd3 Mon Sep 17 00:00:00 2001 From: fddc Date: Fri, 6 Aug 2021 20:41:24 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3win=E5=B9=B3=E5=8F=B0bat?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E4=B8=AD=E6=96=87=E8=B7=AF=E5=BE=84=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E4=B9=B1=E7=A0=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/script/AbstractScriptProcessor.java | 31 ++++++++++++++----- .../processors/impl/script/CMDProcessor.java | 6 ++-- .../impl/script/PowerShellProcessor.java | 2 +- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/AbstractScriptProcessor.java b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/AbstractScriptProcessor.java index 8f65f67f..5de1cbbd 100644 --- a/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/AbstractScriptProcessor.java +++ b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/AbstractScriptProcessor.java @@ -13,6 +13,7 @@ import tech.powerjob.official.processors.util.CommonUtils; import java.io.*; import java.net.URL; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Set; import java.util.concurrent.ForkJoinPool; @@ -30,6 +31,7 @@ public abstract class AbstractScriptProcessor extends CommonBasicProcessor { private static final ForkJoinPool POOL = new ForkJoinPool(4 * Runtime.getRuntime().availableProcessors()); private static final Set DOWNLOAD_PROTOCOL = Sets.newHashSet("http", "https", "ftp"); protected static final String SH_SHELL = "/bin/sh"; + protected static final String CMD_SHELL = "cmd.exe"; private static final String WORKER_DIR = System.getProperty("user.home") + "/powerjob/worker/official_script_processor/"; @@ -62,7 +64,9 @@ public abstract class AbstractScriptProcessor extends CommonBasicProcessor { omsLogger.info("[SYSTEM] chmod 755 authorization complete, ready to start execution~"); } // 2. 执行目标脚本 - ProcessBuilder pb = new ProcessBuilder(getRunCommand(), scriptPath); + ProcessBuilder pb = StringUtils.equals(getRunCommand(), CMD_SHELL) ? + new ProcessBuilder(getRunCommand(), "/c", scriptPath) + : new ProcessBuilder(getRunCommand(), scriptPath); Process process = pb.start(); StringBuilder inputBuilder = new StringBuilder(); @@ -71,10 +75,12 @@ public abstract class AbstractScriptProcessor extends CommonBasicProcessor { boolean success = true; String result; + //解决windows平台中文乱码 + Charset loggerCharset = SystemUtils.IS_OS_WINDOWS? Charset.forName("GBK"):StandardCharsets.UTF_8; try (InputStream is = process.getInputStream(); InputStream es = process.getErrorStream()) { - POOL.execute(() -> copyStream(is, inputBuilder, omsLogger)); - POOL.execute(() -> copyStream(es, errorBuilder, omsLogger)); + POOL.execute(() -> copyStream(is, inputBuilder, omsLogger,loggerCharset)); + POOL.execute(() -> copyStream(es, errorBuilder, omsLogger,loggerCharset)); success = process.waitFor() == 0; @@ -108,16 +114,25 @@ public abstract class AbstractScriptProcessor extends CommonBasicProcessor { } // 非下载链接,为 processInfo 生成可执行文件 - try (FileWriter fw = new FileWriter(script); BufferedWriter bw = new BufferedWriter(fw)) { - bw.write(processorInfo); - bw.flush(); + if(SystemUtils.IS_OS_WINDOWS) + { + try (Writer fstream = new OutputStreamWriter(new FileOutputStream(script), Charset.forName("GBK")); BufferedWriter out = new BufferedWriter(fstream)) { + out.write(processorInfo); + out.flush(); + } + } + else { + try (FileWriter fw = new FileWriter(script); BufferedWriter bw = new BufferedWriter(fw)) { + bw.write(processorInfo); + bw.flush(); + } } return scriptPath; } - private static void copyStream(InputStream is, StringBuilder sb, OmsLogger omsLogger) { + private static void copyStream(InputStream is, StringBuilder sb, OmsLogger omsLogger, Charset charset) { String line; - try (BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) { + try (BufferedReader br = new BufferedReader(new InputStreamReader(is, charset))) { while ((line = br.readLine()) != null) { sb.append(line); // 同步到在线日志 diff --git a/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/CMDProcessor.java b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/CMDProcessor.java index 9b7a40b7..954e26cc 100644 --- a/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/CMDProcessor.java +++ b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/CMDProcessor.java @@ -6,15 +6,15 @@ package tech.powerjob.official.processors.impl.script; * @author fddc * @since 2021/5/14 */ -public class PowerShellProcessor extends AbstractScriptProcessor { +public class CMDProcessor extends AbstractScriptProcessor { @Override protected String getScriptName(Long instanceId) { - return String.format("powershell_%d.bat", instanceId); + return String.format("cmd_%d.bat", instanceId); } @Override protected String getRunCommand() { - return "powershell.exe"; + return "cmd.exe"; } } diff --git a/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/PowerShellProcessor.java b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/PowerShellProcessor.java index 9b7a40b7..47530813 100644 --- a/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/PowerShellProcessor.java +++ b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/PowerShellProcessor.java @@ -10,7 +10,7 @@ public class PowerShellProcessor extends AbstractScriptProcessor { @Override protected String getScriptName(Long instanceId) { - return String.format("powershell_%d.bat", instanceId); + return String.format("powershell_%d.ps1", instanceId); } @Override