From 20c98d2d5c3be87673a577b599a3eadce651b774 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=A4=E5=85=A8=E6=98=86?= Date: Tue, 2 Sep 2025 16:15:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=A1=8C=E9=9D=A2=E9=95=9C=E5=83=8F?= =?UTF-8?q?=E5=88=B6=E4=BD=9C=E8=84=9A=E6=9C=AC=EF=BC=8Cbug=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DeskImageController.java | 6 +-- .../torrent/util/ImageVirtualUtils.java | 42 ++++++++++++------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/torrent-be/src/main/java/com/unisinsight/torrent/controller/DeskImageController.java b/torrent-be/src/main/java/com/unisinsight/torrent/controller/DeskImageController.java index 093a107..2fcf9cb 100644 --- a/torrent-be/src/main/java/com/unisinsight/torrent/controller/DeskImageController.java +++ b/torrent-be/src/main/java/com/unisinsight/torrent/controller/DeskImageController.java @@ -23,7 +23,7 @@ public class DeskImageController { public boolean start(@RequestParam("srcFile") String srcFile, @RequestParam("detFile") String detFile, @RequestParam("name") String name, - @RequestParam("detFile") String type) { + @RequestParam("type") String type) { System.out.println("制作桌面镜像"); boolean result = ImageVirtualUtils.createImage(srcFile, detFile, name, type); System.out.println("执行脚本制作桌面镜像: " + (result ? "成功" : "失败")); @@ -36,8 +36,8 @@ public class DeskImageController { System.out.println("查询进度"); Map resultMap = ImageVirtualUtils.progress(name); if(resultMap.get("process")!=null && (Double)resultMap.get("process") == 100){ - String pid = (String) resultMap.get("pid"); - ImageVirtualUtils.killProgress(pid); +// String pid = (String) resultMap.get("pid"); +// ImageVirtualUtils.killProgress(pid); return 100.0; } else { return (Double) resultMap.get("process"); diff --git a/torrent-be/src/main/java/com/unisinsight/torrent/util/ImageVirtualUtils.java b/torrent-be/src/main/java/com/unisinsight/torrent/util/ImageVirtualUtils.java index 7a0d393..9004bef 100644 --- a/torrent-be/src/main/java/com/unisinsight/torrent/util/ImageVirtualUtils.java +++ b/torrent-be/src/main/java/com/unisinsight/torrent/util/ImageVirtualUtils.java @@ -15,27 +15,42 @@ import java.util.Map; */ public class ImageVirtualUtils { - private static final String BT_SCRIPT_PATH = "/var/lib/vdi/nodejs/convert_image.sh"; -// private static final String JSON_PATH = "/var/lib/vdi/nodejs/json/"; - private static final String JSON_PATH = "D:\\code\\"; + private static final String BT_SCRIPT_PATH = "/deskTest/convert_image.sh"; + private static final String JSON_PATH = "/deskTest/logs"; +// private static final String JSON_PATH = "D:\\code\\"; private static final Long WAIT_START_TIME = 8000L; /** - * 执行 bttorrent.sh 脚本 + * 执行脚本 + * 示例:./convert_image.sh /home/unis/jk/Win10-BIOS.qcow2 /deskTest/win10_compressed2.vhd progress2.json vhd */ - private static boolean executeCommand(String arg1, String arg2, String arg3, String arg4) { + private static boolean executeCommand(String srcFile, String detFile, String name, String type) { try { - // 构造命令 + // 确保脚本文件存在 + File scriptFile = new File(BT_SCRIPT_PATH); + if (!scriptFile.exists()) { + System.err.println("脚本文件不存在: " + BT_SCRIPT_PATH); + return false; + } + + // 确保脚本有执行权限 + if (!scriptFile.canExecute()) { + scriptFile.setExecutable(true); + } + // 使用bash执行脚本,而不是sh ProcessBuilder pb = new ProcessBuilder( - "./", + "bash", BT_SCRIPT_PATH, - arg1, - arg2, - JSON_PATH+arg3, - arg4 - ).redirectErrorStream(true); + srcFile, + detFile, + name, + type); + // 设置工作目录 + pb.directory(scriptFile.getParentFile()); + pb.redirectErrorStream(true); + // 启动进程 Process process = pb.start(); // 启动新线程读取输出,避免阻塞 @@ -46,13 +61,10 @@ public class ImageVirtualUtils { e.printStackTrace(); } }).start(); - // 对于start命令,只要进程启动成功就返回true // 稍微等待一下看初始输出是否有错误 Thread.sleep(WAIT_START_TIME); return process.isAlive(); // 如果进程还在运行,认为启动成功 - - } catch (IOException | InterruptedException e) { e.printStackTrace(); return false;