golang+endless平滑重启(仅用于unix系统)

运行命令

nohup ./server &
------------------------------------------
以下两种方式获取进程pid
ps aux | grep server
ps -ef
------------------------------------------
kill -1 pid
运行该命令实现:服务重新启动的零停机,自动fork新的进程,不会关闭旧链接
 gin代码实现
import (
	"github.com/fvbock/endless"
	"github.com/gin-gonic/gin"
	"log"
	"syscall"
	"time"
)

func initServer(address string, router *gin.Engine) server {
	log.Println(`run in unix`)
	s := endless.NewServer(address, router)
	s.ReadHeaderTimeout = 20 * time.Second
	s.WriteTimeout = 20 * time.Second
	s.MaxHeaderBytes = 1 << 20

	s.BeforeBegin = func(add string) {
		log.Printf("Actual pid is %d", syscall.Getpid())
	}

	s.SignalHooks[endless.PRE_SIGNAL][syscall.SIGUSR2] = append(
		s.SignalHooks[endless.PRE_SIGNAL][syscall.SIGUSR2],
		func() {
			log.Println("Received SIGUSR2, restarting...")
		},
	)
	return s
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值