From ceace3b0f994d50dcdbca83c25f3a5a22d5569a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Fri, 18 Jul 2025 10:29:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=89=8D=E5=85=88=E5=85=B3=E9=97=AD=E8=87=AA=E5=8A=A8=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/qyft/ms/app/service/SystemService.java | 27 ++++++++++++++++------ 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/qyft/ms/app/service/SystemService.java b/src/main/java/com/qyft/ms/app/service/SystemService.java index dd562d5..8ff1c30 100644 --- a/src/main/java/com/qyft/ms/app/service/SystemService.java +++ b/src/main/java/com/qyft/ms/app/service/SystemService.java @@ -4,7 +4,10 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.time.Instant; /** @@ -30,24 +33,34 @@ public class SystemService { */ public void setSystemTime(long epochMilli) { long epochSecond = epochMilli / 1_000; + runCommand("timedatectl", "set-ntp", "false"); runCommand("date", "-s", "@" + epochSecond); runCommand("hwclock", "--systohc"); } - /** - * 辅助:执行系统命令并检查退出码 - */ - private void runCommand(String... cmd) { + private String runCommand(String... cmd) { try { + log.info("CMD: {}", String.join(" ", cmd)); ProcessBuilder pb = new ProcessBuilder(cmd); - pb.inheritIO(); + pb.environment().put("PATH", "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"); + pb.redirectErrorStream(true); + Process p = pb.start(); + StringBuilder out = new StringBuilder(); + try (BufferedReader r = new BufferedReader( + new InputStreamReader(p.getInputStream(), StandardCharsets.UTF_8))) { + String line; + while ((line = r.readLine()) != null) { + out.append(line).append('\n'); + } + } int exit = p.waitFor(); if (exit != 0) { throw new IllegalStateException( - String.format("命令 %s 执行失败,退出码=%d", String.join(" ", cmd), exit) - ); + String.format("命令执行失败: [%s], 退出码=%d, 输出=\n%s", + String.join(" ", cmd), exit, out)); } + return out.toString(); } catch (IOException | InterruptedException e) { Thread.currentThread().interrupt(); throw new RuntimeException("执行系统命令失败: " + String.join(" ", cmd), e);