|
@@ -0,0 +1,136 @@
|
|
|
+package com.fd.server.impl;
|
|
|
+
|
|
|
+import com.fd.constant.MsgCode;
|
|
|
+import com.fd.server.CmdServer;
|
|
|
+import com.fd.util.R;
|
|
|
+import lombok.extern.log4j.Log4j2;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.io.BufferedReader;
|
|
|
+import java.io.InputStreamReader;
|
|
|
+
|
|
|
+/**
|
|
|
+ * Created by Owen on 2019/11/14 0014 15:33
|
|
|
+ */
|
|
|
+@Log4j2
|
|
|
+@Service
|
|
|
+public class CmdServerImpl implements CmdServer {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R exeCmd(String commandStr) {
|
|
|
+ Integer isCmd = exeCmdSingle(commandStr);
|
|
|
+// Integer isCmd = null; // 命令运行结果 1:失败, 0:成功
|
|
|
+// try {
|
|
|
+// String[] cmd = new String[]{"/bin/sh", "-c", commandStr};
|
|
|
+// Process ps = Runtime.getRuntime().exec(cmd);
|
|
|
+//
|
|
|
+// BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
|
|
|
+// BufferedReader errorBuf = new BufferedReader(new InputStreamReader(ps.getErrorStream()));
|
|
|
+//
|
|
|
+// StringBuffer sb = new StringBuffer();
|
|
|
+// StringBuffer errorStr = new StringBuffer();
|
|
|
+//
|
|
|
+// // error : 坑, 控制台信息是从errorBuf这里出来的
|
|
|
+// String errorLine;
|
|
|
+// while ((errorLine = errorBuf.readLine()) != null) {
|
|
|
+// errorStr.append(errorLine).append("\n");
|
|
|
+// }
|
|
|
+// log.info("error result: {}", errorStr.toString());
|
|
|
+//
|
|
|
+// // success ,没有获取到信息
|
|
|
+// String line;
|
|
|
+// while ((line = br.readLine()) != null) {
|
|
|
+//// log.info("===== br.readLine: ======== {}", br.readLine());
|
|
|
+// //执行结果加上回车
|
|
|
+// sb.append(line).append("\n");
|
|
|
+// }
|
|
|
+// log.info("result: {}", sb.toString());
|
|
|
+//
|
|
|
+// // 结束命令行
|
|
|
+// isCmd = ps.waitFor();
|
|
|
+//
|
|
|
+// // 关闭流
|
|
|
+// br.close();
|
|
|
+// errorBuf.close();
|
|
|
+//
|
|
|
+// } catch (Exception e) {
|
|
|
+// e.printStackTrace();
|
|
|
+// }
|
|
|
+
|
|
|
+ if (isCmd == 0) {
|
|
|
+ return new R(200, MsgCode.SUCCESS);
|
|
|
+ } else {
|
|
|
+ return new R(200, MsgCode.E50005);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 复杂坐标转换
|
|
|
+ @Override
|
|
|
+ public R exeCmd(String cmd1, String cmd2) {
|
|
|
+
|
|
|
+ exeCmdSingle(cmd1);
|
|
|
+ Integer isCmd = exeCmdSingle(cmd2);
|
|
|
+ if (isCmd == 0) {
|
|
|
+ return new R(200, MsgCode.SUCCESS);
|
|
|
+ } else {
|
|
|
+ return new R(200, MsgCode.E50005);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R exeCmd(String commandStr, Long id) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private Integer exeCmdSingle(String commandStr) {
|
|
|
+
|
|
|
+ Integer isCmd = null; // 命令运行结果 1:失败, 0:成功
|
|
|
+ try {
|
|
|
+ String[] cmd = new String[]{"/bin/sh", "-c", commandStr};
|
|
|
+ Process ps = Runtime.getRuntime().exec(cmd);
|
|
|
+
|
|
|
+ BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
|
|
|
+ BufferedReader errorBuf = new BufferedReader(new InputStreamReader(ps.getErrorStream()));
|
|
|
+
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
+ StringBuffer errorStr = new StringBuffer();
|
|
|
+
|
|
|
+ // error : 坑, 控制台信息是从errorBuf这里出来的
|
|
|
+ String errorLine;
|
|
|
+ while ((errorLine = errorBuf.readLine()) != null) {
|
|
|
+ errorStr.append(errorLine).append("\n");
|
|
|
+ }
|
|
|
+ log.info("error result: {}", errorStr.toString());
|
|
|
+
|
|
|
+ // success ,没有获取到信息
|
|
|
+ String line;
|
|
|
+ while ((line = br.readLine()) != null) {
|
|
|
+// log.info("===== br.readLine: ======== {}", br.readLine());
|
|
|
+ //执行结果加上回车
|
|
|
+ sb.append(line).append("\n");
|
|
|
+ }
|
|
|
+ log.info("result: {}", sb.toString());
|
|
|
+
|
|
|
+ // 结束命令行
|
|
|
+ isCmd = ps.waitFor();
|
|
|
+
|
|
|
+ // 关闭流
|
|
|
+ br.close();
|
|
|
+ errorBuf.close();
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isCmd == 0) {
|
|
|
+ log.info("end exeCmd : {}", isCmd);
|
|
|
+ } else {
|
|
|
+ log.info("wsitFore cmd run error : {}", isCmd);
|
|
|
+ }
|
|
|
+ return isCmd;
|
|
|
+ }
|
|
|
+}
|