在 Go 中的零停机重启
goagain 包提供了原语,可为接受来自 net.TCPListener 或 net.UnixListener 的 Go 应用程序实现零停机重启。
请看一下示例,因为这不仅仅是导入库并使一切正常运行的问题。您的 main 函数必须支持 goagain 协议,并且您的进程必须具备某种(无论您如何设计)优雅关闭进程的定义。
安装使用 goagain 向进程发送 SIGUSR2 信号,它将在无停机时间的情况下重新启动。example/single/main.go: Single 策略(因其只调用一次 execve(2))的工作方式与 Nginx 和 Unicorn 类似。父进程分叉一个子进程,子进程执行,然后子进程杀死父进程。这种方式易于理解,但与 Upstart 和类似的直接监督 init(8) 守护程序不兼容。它应该与 systemd 兼容。
example/double/main.go: Double 策略(因为它调用了 execve(2) 两次)是实验性的,因此请谨慎使用。父进程 fork 出一个子进程,子进程执行,子进程向父进程发出信号,父进程执行,最后父进程杀死子进程。不幸的是,这要复杂得多,但它与 Upstart 和类似的直接监控 init(8) 守护进程协作得很好。
暂无开放 Issues,或尚未同步最近议题。