|
|
@@ -577,10 +577,8 @@ func serviceVersionSwitchHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
}
|
|
|
}
|
|
|
if target == "" {
|
|
|
- json.NewEncoder(w).Encode(VersionResp{
|
|
|
- Status: "error",
|
|
|
- Message: "当前没有可回退的上一版本",
|
|
|
- })
|
|
|
+ json.NewEncoder(w).Encode(VersionResp{Status: "error",
|
|
|
+ Message: "当前没有可回退的上一版本"})
|
|
|
return
|
|
|
}
|
|
|
default:
|
|
|
@@ -618,21 +616,30 @@ func serviceVersionSwitchHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
}
|
|
|
|
|
|
if out, err := exec.Command("systemctl", "start", req.Service).CombinedOutput(); err != nil {
|
|
|
- tmp := filepath.Join(cfg.dir, cfg.bin+".tmp")
|
|
|
+ startErr := fmt.Errorf("目标版本启动失败: %s", out)
|
|
|
os.Remove(tmp)
|
|
|
|
|
|
- if e := os.Symlink(oldLink, tmp); e == nil {
|
|
|
- if e = os.Rename(tmp, link); e != nil {
|
|
|
- os.Remove(tmp)
|
|
|
- }
|
|
|
+ if e := os.Symlink(oldLink, tmp); e != nil {
|
|
|
+ json.NewEncoder(w).Encode(VersionResp{Status: "error",
|
|
|
+ Message: fmt.Sprintf("%v: 创建回滚链接失败: %v", startErr, e)})
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
- exec.Command("systemctl", "start", req.Service).Run()
|
|
|
+ if e := os.Rename(tmp, link); e != nil {
|
|
|
+ os.Remove(tmp)
|
|
|
+ json.NewEncoder(w).Encode(VersionResp{Status: "error",
|
|
|
+ Message: fmt.Sprintf("%v: 切换回滚链接失败: %v", startErr, e)})
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if e := exec.Command("systemctl", "start", req.Service).Run(); e != nil {
|
|
|
+ json.NewEncoder(w).Encode(VersionResp{Status: "error",
|
|
|
+ Message: fmt.Sprintf("%v: 启动回滚版本失败: %v", startErr, e)})
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
- json.NewEncoder(w).Encode(VersionResp{
|
|
|
- Status: "error",
|
|
|
- Message: fmt.Sprintf("目标版本启动失败,已恢复旧版本: %s", out),
|
|
|
- })
|
|
|
+ json.NewEncoder(w).Encode(VersionResp{Status: "error",
|
|
|
+ Message: "目标版本启动失败,已恢复到旧有版本"})
|
|
|
return
|
|
|
}
|
|
|
|