在Hacker News看到用Go达到Zero-downtime restarts,意思大概为零下线时间式重启,很早就知道nginx能够轻松作到平滑重启,一直都想用go来实现这样的功能。看了一下它的代码实现,因此有了这篇博文。nginx
项目名字叫goagain,地址在:https://github.com/rcrowley/goagain。该项目是一个类库,也就是package,在go开发的程序中添加这个package就能够轻松地重启程序。git
goagain会监控2个系统信号,一个为SIGTERM,接收到这个信号,程序就中止运行。另外一个信号为SIGUSR2,接收到这个信号的行为是,当前进程,也就是父进程会新建一个子进程,而后把父进程的pid保存到一个名为GOAGAIN_PPID的环境变量;子进程启动的时候会检索GOAGAIN_PPID这个变量,来判断程序是否要重启,经过这个变量来关闭父进程,来达到平滑重启的效果。github
goagain项目里面有一个例子,按照这个例子,咱们就能够按照需求打造本身的程序。我我的测试了一下例子,可以运行,效果不错。下面是截图效果。测试
转贴请注明来自:格通spa