ShellUtil.java 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package com.jiayue.ipfcst.spare2.util;
  2. import cn.hutool.core.io.IoUtil;
  3. import cn.hutool.core.util.ArrayUtil;
  4. import cn.hutool.core.util.RuntimeUtil;
  5. import com.jiayue.ipfcst.common.data.dto.ProcessResult;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.apache.commons.lang3.StringUtils;
  8. import java.io.File;
  9. import java.nio.charset.StandardCharsets;
  10. import java.text.SimpleDateFormat;
  11. import java.util.ArrayList;
  12. import java.util.List;
  13. import java.util.Map;
  14. @Slf4j
  15. public class ShellUtil {
  16. private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  17. /**
  18. * 执行sh命令
  19. *
  20. * @param cmds
  21. * @return
  22. */
  23. public static ProcessResult runRuntime(List<String> cmds) {
  24. log.info("开始执行");
  25. ProcessResult processResult = new ProcessResult();
  26. if (null == cmds || cmds.isEmpty()) {
  27. processResult.setExitCode(1);
  28. log.error("命令行为空!");
  29. } else {
  30. List<String> result = RuntimeUtil.execForLines(StandardCharsets.UTF_8, ArrayUtil.toArray(cmds, String.class));
  31. processResult.setOutput(result);
  32. processResult.setExitCode(0);
  33. result.forEach(log::info);
  34. }
  35. log.info("执行结束");
  36. return processResult;
  37. }
  38. /**
  39. * 执行sh命令,可配置环境变量及工作路径
  40. *
  41. * @param cmds
  42. * @param envs
  43. * @param workspace
  44. * @return
  45. */
  46. public static ProcessResult runProcess(List<String> cmds, Map<String, String> envs, File workspace) {
  47. log.info("开始执行");
  48. Process process = null;
  49. ProcessResult result = new ProcessResult();
  50. List<String> message;
  51. try {
  52. ProcessBuilder processBuilder = new ProcessBuilder();
  53. processBuilder.command(cmds);
  54. //命令工作空间
  55. if (null != workspace && workspace.exists() && workspace.isDirectory()) {
  56. processBuilder.directory(workspace);
  57. }
  58. //环境变量
  59. if (null != envs) {
  60. Map<String, String> enviroment = processBuilder.environment();
  61. for (String key : envs.keySet()) {
  62. if (enviroment.containsKey(key)) {
  63. if (!StringUtils.equals(enviroment.get(key), envs.get(key))) {
  64. enviroment.put(key, envs.get(key));
  65. }
  66. } else {
  67. enviroment.put(key, envs.get(key));
  68. }
  69. }
  70. }
  71. log.info(String.join(" ", processBuilder.command()));
  72. //执行命令
  73. process = processBuilder.start();
  74. message = IoUtil.readUtf8Lines(process.getInputStream(), new ArrayList<>());
  75. result.setOutput(message);
  76. result.setExitCode(0);
  77. } catch (Exception ex) {
  78. result.setExitCode(1);
  79. } finally {
  80. RuntimeUtil.destroy(process);
  81. log.info("执行结束");
  82. }
  83. return result;
  84. }
  85. }