ProcessBuilder工具类及执行多条命令
public class ProcessUtil { private static final Logger logger = LoggerFactory.getLogger(ProcessUtil.class); private static final Integer WAIT_TIME = 20; /** * 执行脚本命令 * @param commands * @throws */ public static Integer exec(List<String> commands, StringBuffer outPutResult) throws Exception{ String[] arrCommands = list2Array(commands); ProcessBuilder processBuilder = new ProcessBuilder(arrCommands); processBuilder.redirectErrorStream(true); Process process = null; try { process = processBuilder.start(); final BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8)); new Thread(() -> { try { String str; while ((str = br.readLine()) != null) { if(outPutResult != null){ outPutResult.append(str); }else{ logger.info(str); } } }catch (Exception e) { logger.error("获取子进程输出错误:", e); } }); process.waitFor(WAIT_TIME, TimeUnit.SECONDS); return process.exitValue(); } finally { if(process != null){ process.destroy(); } } } /** * List转String * @param commands * @return */ private static String[] list2Array(List<String> commands){ String[] commends = new String[commands.size()]; commands.toArray(commends); return commends; } }
执行多条命令:
* List<String> commend = new ArrayList<>(); * commend.add("/bin/sh"); * commend.add("-c"); * // /bin/bash -c 7zzs x /usr/data/tmp/测试.zip -o/usr/data/tmp/one/ && convmv -f GBK -t utf8 --notest -r /usr/data/tmp/one/ * commend.add("第1条命令 && 第2条命令 && 第3条命令 ..."); //这里可以实现执行多条linux命令 * Process process = ProcessBuilder.exec(commend); * String message = ProcessBuilder.getOutput(process); * String error = ProcessBuilder.getError(process); * ProcessBuilder.destroy(process);
下一篇:
springboot+监听器(日志信息)