Go语言实现平滑重启(Graceful Restart)常用于Web服务器场景,尤其需要不停服升级或配置切换时。下面以一个HTTP服务为例,提供完整源码,说明如何实现平滑重启:
基本原理
父进程监听端口。
平滑重启时,启动子进程,将监听socket(文件描述符)传递给子进程。
子进程启动后接管监听socket,父进程优雅关闭(如等待处理完已连接请求)。
客户端连接不受影响,无需等待服务器重启。
常用信号:
SIGUSR2(用户定义的信号,用于触发重启)
SIGTERM/SIGINT(优雅退出)
依赖
Go 1.8+
net/http包
Unix系统(文件描述符继承)
完整示例源码
- graceful_server.go
go
复制
package main