From 9424d061fa37a2fcf5dea8f9d79d258fe590de2d Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Fri, 12 Dec 2025 18:13:35 +0800 Subject: [PATCH] fix: Fix version upgrade failure in some scenarios (#11322) --- core/app/service/upgrade.go | 4 ++-- core/utils/files/files.go | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/core/app/service/upgrade.go b/core/app/service/upgrade.go index d69549400..91443f782 100644 --- a/core/app/service/upgrade.go +++ b/core/app/service/upgrade.go @@ -156,13 +156,13 @@ func (u *UpgradeService) Upgrade(req dto.Upgrade) error { global.LOG.Info("backup original data successful, now start to upgrade!") - if err := files.CopyItem(false, true, path.Join(tmpDir, "1panel-core"), "/usr/local/bin"); err != nil { + if err := files.CopyFileWithRename(path.Join(tmpDir, "1panel-core"), "/usr/local/bin/1panel-core.tmp"); err != nil { global.LOG.Errorf("upgrade 1panel-core failed, err: %v", err) _ = settingRepo.Update("SystemStatus", "Free") u.handleRollback(originalDir, 1) return } - if err := files.CopyItem(false, true, path.Join(tmpDir, "1panel-agent"), "/usr/local/bin"); err != nil { + if err := files.CopyFileWithRename(path.Join(tmpDir, "1panel-agent"), "/usr/local/bin/1panel-agent.tmp"); err != nil { global.LOG.Errorf("upgrade 1panel-agent failed, err: %v", err) _ = settingRepo.Update("SystemStatus", "Free") u.handleRollback(originalDir, 1) diff --git a/core/utils/files/files.go b/core/utils/files/files.go index 868ef2872..322eb2f5e 100644 --- a/core/utils/files/files.go +++ b/core/utils/files/files.go @@ -73,6 +73,25 @@ func CopyItem(isDir, withName bool, src, dst string) error { return nil } +func CopyFileWithRename(src, dst string) error { + srcInfo, err := os.Stat(path.Dir(src)) + if err != nil { + return err + } + if _, err := os.Stat(path.Dir(dst)); err != nil { + if os.IsNotExist(err) { + _ = os.MkdirAll(path.Dir(dst), srcInfo.Mode()) + } + } + if err := cmd.RunDefaultBashCf("cp -f %s %s.tmp", src, dst); err != nil { + return fmt.Errorf("handle cp file failed, err: %v", err) + } + if err = cmd.RunDefaultBashCf("mv %s.tmp %s", dst, dst); err != nil { + return err + } + return nil +} + func HandleTar(sourceDir, targetDir, name, exclusionRules string, secret string) error { if _, err := os.Stat(targetDir); err != nil && os.IsNotExist(err) { if err = os.MkdirAll(targetDir, os.ModePerm); err != nil {