1、打开配置
beego.BConfig.Listen.Graceful = true
2、写入pid
程序入口main()函数里写入pid
func writePid() { fileName := "./test_server.pid" file, _ := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, 0666) defer file.Close() writer := bufio.NewWriter(file) pid := strconv.Itoa(os.Getpid()) writer.Write([]byte(pid)) writer.Flush() }
3、测试热升级
1、编写代码,在beego应用的controller中Get方法实现大概如下:
func (this *MainController) Get() { a, _ := this.GetInt("sleep") time.Sleep(time.Duration(a) * time.Second) this.Ctx.WriteString("ospid:" + strconv.Itoa(os.Getpid())) }
2、打开两个终端
一个终端输入:ps -ef | grep 应用名
一个终端输入请求:curl "http://127.0.0.1:8080/?sleep=20"
3、热升级
kill -HUP 进程ID
4、打开一个终端输入请求:curl "http://127.0.0.1:8080/?sleep=0"
我们可以看到这样的结果,第一个请求等待20s,但是处理他的是老的进程,热升级之后,第一个请求还在执行,最后会输出老的进程ID,而第二次请求,输出的是新的进程ID