diff --git a/agent/app/service/device.go b/agent/app/service/device.go index e89da75c7..53c849f2c 100644 --- a/agent/app/service/device.go +++ b/agent/app/service/device.go @@ -120,12 +120,7 @@ func (u *DeviceService) Update(key, value string) error { if err := ntp.UpdateSystemTimeZone(value); err != nil { return err } - go func() { - _, err := cmd.Exec("systemctl restart 1panel.service") - if err != nil { - global.LOG.Errorf("restart system for new time zone failed, err: %v", err) - } - }() + go common.RestartService(true, true, false) case "DNS": if err := updateDNS(strings.Split(value, ",")); err != nil { return err diff --git a/agent/app/service/device_clean.go b/agent/app/service/device_clean.go index d565f31e7..736856b6d 100644 --- a/agent/app/service/device_clean.go +++ b/agent/app/service/device_clean.go @@ -19,7 +19,6 @@ import ( "github.com/1Panel-dev/1Panel/agent/app/repo" "github.com/1Panel-dev/1Panel/agent/app/task" "github.com/1Panel-dev/1Panel/agent/global" - "github.com/1Panel-dev/1Panel/agent/utils/cmd" "github.com/1Panel-dev/1Panel/agent/utils/common" fileUtils "github.com/1Panel-dev/1Panel/agent/utils/files" "github.com/google/uuid" @@ -275,12 +274,7 @@ func (u *DeviceService) Clean(req []dto.Clean) { _ = settingRepo.Update("LastCleanData", fmt.Sprintf("%v", len(req))) if restart { - go func() { - _, err := cmd.Exec("systemctl restart 1panel.service") - if err != nil { - global.LOG.Errorf("restart system port failed, err: %v", err) - } - }() + go common.RestartService(false, true, false) } } diff --git a/agent/app/service/image.go b/agent/app/service/image.go index d093135a4..7749d8d0b 100644 --- a/agent/app/service/image.go +++ b/agent/app/service/image.go @@ -204,7 +204,6 @@ func (u *ImageService) ImageBuild(req dto.ImageBuild) error { defer tar.Close() taskItem.AddSubTask(i18n.GetMsgByKey("ImageBuild"), func(t *task.Task) error { res, err := client.ImageBuild(context.Background(), tar, opts) - taskItem.LogWithStatus(i18n.GetMsgByKey("TaskBuild"), err) if err != nil { return err } diff --git a/agent/app/service/snapshot_create.go b/agent/app/service/snapshot_create.go index b1b68e80f..ac8115a23 100644 --- a/agent/app/service/snapshot_create.go +++ b/agent/app/service/snapshot_create.go @@ -261,13 +261,15 @@ func snapBaseData(snap snapHelper, targetDir string) error { snap.Task.Log("---------------------- 2 / 8 ----------------------") snap.Task.LogStart(i18n.GetMsgByKey("SnapBaseInfo")) - err := snap.FileOp.CopyFile("/usr/local/bin/1panel-core", targetDir) - snap.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/usr/local/bin/1panel-core"), err) - if err != nil { - return err + if global.IsMaster { + err := snap.FileOp.CopyFile("/usr/local/bin/1panel-core", targetDir) + snap.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/usr/local/bin/1panel-core"), err) + if err != nil { + return err + } } - err = snap.FileOp.CopyFile("/usr/local/bin/1panel-agent", targetDir) + err := snap.FileOp.CopyFile("/usr/local/bin/1panel-agent", targetDir) snap.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/usr/local/bin/1panel-agent"), err) if err != nil { return err @@ -279,10 +281,12 @@ func snapBaseData(snap snapHelper, targetDir string) error { return err } - err = snap.FileOp.CopyFile("/etc/systemd/system/1panel.service", targetDir) - snap.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/etc/systemd/system/1panel.service"), err) - if err != nil { - return err + if global.IsMaster { + err = snap.FileOp.CopyFile("/etc/systemd/system/1panel-core.service", targetDir) + snap.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/etc/systemd/system/1panel-core.service"), err) + if err != nil { + return err + } } err = snap.FileOp.CopyFile("/etc/systemd/system/1panel-agent.service", targetDir) diff --git a/agent/app/service/snapshot_recover.go b/agent/app/service/snapshot_recover.go index b9c3e5c16..6ba546852 100644 --- a/agent/app/service/snapshot_recover.go +++ b/agent/app/service/snapshot_recover.go @@ -18,6 +18,7 @@ import ( "github.com/1Panel-dev/1Panel/agent/global" "github.com/1Panel-dev/1Panel/agent/i18n" "github.com/1Panel-dev/1Panel/agent/utils/cmd" + "github.com/1Panel-dev/1Panel/agent/utils/common" "github.com/1Panel-dev/1Panel/agent/utils/compose" "github.com/1Panel-dev/1Panel/agent/utils/files" "github.com/pkg/errors" @@ -179,7 +180,7 @@ func (u *SnapshotService) SnapshotRecover(req dto.SnapshotRecover) error { return } _ = os.RemoveAll(rootDir) - _, _ = cmd.Exec("systemctl daemon-reload && systemctl restart 1panel.service") + common.RestartService(true, true, true) }() return nil } @@ -236,8 +237,8 @@ func backupBeforeRecover(name string, itemHelper *snapRecoverHelper) error { if err != nil { return err } - err = itemHelper.FileOp.CopyFile("/etc/systemd/system/1panel.service", baseDir) - itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/etc/systemd/system/1panel.service"), err) + err = itemHelper.FileOp.CopyFile("/etc/systemd/system/1panel-core.service", baseDir) + itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/etc/systemd/system/1panel-core.service"), err) if err != nil { return err } @@ -327,20 +328,24 @@ func recoverBaseData(src string, itemHelper *snapRecoverHelper) error { return err } - err = itemHelper.FileOp.CopyFile(path.Join(src, "1panel"), "/usr/local/bin") - itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/usr/local/bin/1panel-core"), err) - if err != nil { - return err + if global.IsMaster { + err = itemHelper.FileOp.CopyFile(path.Join(src, "1panel"), "/usr/local/bin") + itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/usr/local/bin/1panel-core"), err) + if err != nil { + return err + } } err = itemHelper.FileOp.CopyFile(path.Join(src, "1panel-agent"), "/usr/local/bin") itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/usr/local/bin/1panel-agent"), err) if err != nil { return err } - err = itemHelper.FileOp.CopyFile(path.Join(src, "1panel.service"), "/etc/systemd/system") - itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/etc/systemd/system/1panel.service"), err) - if err != nil { - return err + if global.IsMaster { + err = itemHelper.FileOp.CopyFile(path.Join(src, "1panel-core.service"), "/etc/systemd/system") + itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/etc/systemd/system/1panel-core.service"), err) + if err != nil { + return err + } } err = itemHelper.FileOp.CopyFile(path.Join(src, "1panel-agent.service"), "/etc/systemd/system") itemHelper.Task.LogWithStatus(i18n.GetWithName("SnapCopy", "/etc/systemd/system/1panel-agent.service"), err) diff --git a/agent/app/service/snapshot_rollback.go b/agent/app/service/snapshot_rollback.go index f0da28fcc..c3215ffd9 100644 --- a/agent/app/service/snapshot_rollback.go +++ b/agent/app/service/snapshot_rollback.go @@ -43,13 +43,15 @@ func (u *SnapshotService) SnapshotRollback(req dto.SnapshotRecover) error { }, nil, ) - taskItem.AddSubTask( - i18n.GetWithName("SnapCopy", "/usr/local/bin/1panel-core"), - func(t *task.Task) error { - return FileOp.CopyFile(path.Join(baseDir, "1panel"), "/usr/local/bin") - }, - nil, - ) + if global.IsMaster { + taskItem.AddSubTask( + i18n.GetWithName("SnapCopy", "/usr/local/bin/1panel-core"), + func(t *task.Task) error { + return FileOp.CopyFile(path.Join(baseDir, "1panel"), "/usr/local/bin") + }, + nil, + ) + } taskItem.AddSubTask( i18n.GetWithName("SnapCopy", "/usr/local/bin/1panel-agent"), func(t *task.Task) error { @@ -57,17 +59,19 @@ func (u *SnapshotService) SnapshotRollback(req dto.SnapshotRecover) error { }, nil, ) - taskItem.AddSubTask( - i18n.GetWithName("SnapCopy", "/etc/systemd/system/1panel.service"), - func(t *task.Task) error { - return FileOp.CopyFile(path.Join(baseDir, "1panel.service"), "/etc/systemd/system") - }, - nil, - ) + if global.IsMaster { + taskItem.AddSubTask( + i18n.GetWithName("SnapCopy", "/etc/systemd/system/1panel-core.service"), + func(t *task.Task) error { + return FileOp.CopyFile(path.Join(baseDir, "1panel-core.service"), "/etc/systemd/system") + }, + nil, + ) + } taskItem.AddSubTask( i18n.GetWithName("SnapCopy", "/etc/systemd/system/1panel-agent.service"), func(t *task.Task) error { - return FileOp.CopyFile(path.Join(baseDir, "1panel.service"), "/etc/systemd/system") + return FileOp.CopyFile(path.Join(baseDir, "1panel-agent.service"), "/etc/systemd/system") }, nil, ) diff --git a/agent/utils/common/common.go b/agent/utils/common/common.go index 41a9302cd..d3a03888c 100644 --- a/agent/utils/common/common.go +++ b/agent/utils/common/common.go @@ -17,6 +17,7 @@ import ( "github.com/gin-gonic/gin" "github.com/1Panel-dev/1Panel/agent/buserr" + "github.com/1Panel-dev/1Panel/agent/global" "github.com/1Panel-dev/1Panel/agent/utils/cmd" "golang.org/x/net/idna" ) @@ -377,3 +378,24 @@ func HandleIPList(content string) ([]string, error) { } return res, nil } + +func RestartService(core, agent, reload bool) { + command := "" + if reload { + command = "systemctl daemon-reload && " + } + switch { + case core && agent: + command += "systemctl restart 1panel-core.service && systemctl restart 1pane-agent.service" + case core: + command += "systemctl restart 1panel-core.service" + case agent: + command += "systemctl restart 1pane-agent.service" + default: + return + } + std, err := cmd.ExecWithTimeOut(command, 1*time.Minute) + if err != nil { + global.LOG.Errorf("restart 1panel service failed, err: %v, std: %s", err, std) + } +} diff --git a/core/app/service/setting.go b/core/app/service/setting.go index f0e9ab0bc..e86bd1231 100644 --- a/core/app/service/setting.go +++ b/core/app/service/setting.go @@ -9,8 +9,6 @@ import ( "encoding/json" "encoding/pem" "fmt" - "github.com/1Panel-dev/1Panel/core/app/model" - "github.com/1Panel-dev/1Panel/core/utils/req_helper" "net" "net/http" "os" @@ -19,6 +17,9 @@ import ( "strings" "time" + "github.com/1Panel-dev/1Panel/core/app/model" + "github.com/1Panel-dev/1Panel/core/utils/req_helper" + "github.com/1Panel-dev/1Panel/core/app/dto" "github.com/1Panel-dev/1Panel/core/app/repo" "github.com/1Panel-dev/1Panel/core/buserr" @@ -170,7 +171,7 @@ func (u *SettingService) UpdateBindInfo(req dto.BindInfo) error { } go func() { time.Sleep(1 * time.Second) - _, err := cmd.Exec("systemctl restart 1panel.service") + _, err := cmd.Exec("systemctl restart 1panel-core.service") if err != nil { global.LOG.Errorf("restart system with new bind info failed, err: %v", err) } @@ -221,7 +222,7 @@ func (u *SettingService) UpdatePort(port uint) error { } go func() { time.Sleep(1 * time.Second) - if _, err := cmd.Exec("systemctl restart 1panel.service"); err != nil { + if _, err := cmd.Exec("systemctl restart 1panel-core.service"); err != nil { global.LOG.Errorf("restart system port failed, err: %v", err) } }() diff --git a/core/app/service/upgrade.go b/core/app/service/upgrade.go index ffecf79c1..b394fef7f 100644 --- a/core/app/service/upgrade.go +++ b/core/app/service/upgrade.go @@ -168,7 +168,7 @@ func (u *UpgradeService) Upgrade(req dto.Upgrade) error { go writeLogs(req.Version) _ = settingRepo.Update("SystemVersion", req.Version) _ = settingRepo.Update("SystemStatus", "Free") - _, _ = cmd.ExecWithTimeOut("systemctl daemon-reload && systemctl restart 1panel.service", 1*time.Minute) + _, _ = cmd.ExecWithTimeOut("systemctl daemon-reload && systemctl restart 1panel-core.service && systemctl restart 1pane-agent.service", 1*time.Minute) }() return nil } diff --git a/core/cmd/server/cmd/restore.go b/core/cmd/server/cmd/restore.go index ae30448d4..dcd5f8742 100644 --- a/core/cmd/server/cmd/restore.go +++ b/core/cmd/server/cmd/restore.go @@ -58,7 +58,10 @@ var restoreCmd = &cobra.Command{ geoPath := path.Join(global.CONF.Base.InstallDir, "1panel/geo") _, _ = cmdUtils.Execf("mkdir %s && cp %s %s/", geoPath, path.Join(tmpPath, "GeoIP.mmdb"), geoPath) fmt.Println(i18n.GetMsgByKeyForCmd("RestoreStep3")) - if err := files.CopyFile(path.Join(tmpPath, "1panel.service"), "/etc/systemd/system", true); err != nil { + if err := files.CopyFile(path.Join(tmpPath, "1panel-core.service"), "/etc/systemd/system", true); err != nil { + return err + } + if err := files.CopyFile(path.Join(tmpPath, "1panel-agent.service"), "/etc/systemd/system", true); err != nil { return err } fmt.Println(i18n.GetMsgByKeyForCmd("RestoreStep4"))