/** * @Author: zou.yingbin * @Create : 2021/10/20 15:20 * @Modify : 2021/10/20 15:20 * @Note : 生成用于内网升级的.sh脚本 */ package other import ( "github.com/gin-gonic/gin" "net/http" "os" "os/exec" "path/filepath" "runtime" "strings" ) var IsUpdateing = false // MakeUpdateScript 生成脚本 func MakeUpdateScript(c *gin.Context) { if IsUpdateing { c.String(http.StatusOK, "正在升级中...") return } if runtime.GOOS == "windows" { c.String(http.StatusOK, "windows不支持, 仅支持linux下执行") return } IsUpdateing = true defer func() { IsUpdateing = false }() if createsh() { c.String(http.StatusOK, "正在执行update.sh, 升级会保留原有的config.xml,且重启服务。稍后请在日志页面查看版本信息, 请勿刷新本页面。") _ = exec.Command("sh", "./update.sh").Run() } else { c.String(http.StatusBadRequest, "创建脚本失败, 可能是权限不足") } } // 生成update.sh文件 func createsh() bool { dir := "" if str, err := filepath.Abs(filepath.Dir(os.Args[0])); err == nil { dir = strings.Replace(str, "\\", "/", -1) } else { return false } sh := "# author : zyb\n" + "# note : 在程序运行目录执行此脚本, 升级go服务到最新构建的版本。升级完成自动重启go服务\n" + "# --------------------------------------------------------------------\n" + "\n" + "mkdir -p upmtpgo\n" + "cd upmtpgo\n" + "rm -f console\n" + "wget -c http://192.168.30.153:8080/view/mtp2.0_release/job/mtp2.0_QueryService_linux/label=192.168.31.56/lastBuild/console\n" + "filename=`grep -o -w -m1 mtp2.*zip console`\n" + "wget -c http://192.168.30.153/share/build/mtp2.0_release/$filename\n" + "rm -rf queryservice\n" + "unzip $filename -d queryservice\n" + "cp ../config/config.xml ./queryservice/config/config.xml\n" + "cp ../config/cfg.json ./queryservice/config/cfg.json\n" + "cp -rf ./queryservice/* ../\n" + "cd ..\n" + "rm -rf upmtpgo\n" + "pkill QueryService\n" + "nohup `pwd`/QueryService &" // 创建文件 if f, err := os.OpenFile(dir+"/update.sh", os.O_RDWR|os.O_CREATE, 0666); err == nil { _, err = f.Write([]byte(sh)) f.Close() } else { return false } return true }