This commit is contained in:
chenpengdev 2017-10-23 10:22:34 +00:00 committed by GitHub
commit 4bb5841db9

View file

@ -17,6 +17,7 @@ limitations under the License.
package main package main
import ( import (
"net/http"
"os" "os"
"os/signal" "os/signal"
"syscall" "syscall"
@ -44,11 +45,45 @@ func main() {
func handleSigterm(ngx *controller.NGINXController) { func handleSigterm(ngx *controller.NGINXController) {
signalChan := make(chan os.Signal, 1) signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, syscall.SIGTERM) signal.Notify(signalChan, syscall.SIGTERM, syscall.SIGUSR1, syscall.SIGUSR2)
<-signalChan
glog.Infof("Received SIGTERM, shutting down")
running := false
srv := &http.Server{Addr: ":61234"}
for value := range signalChan {
glog.V(4).Infof("Received %s, shutting down\n", value.String())
switch value {
case syscall.SIGUSR1:
go func() {
if running {
glog.V(1).Info("SIGUSR1 hited, http://:61234 pprof service running")
return
}
glog.Info("SIGUSR1 hited, to start http//:61234 pprof service")
running = true
if err := srv.ListenAndServe(); err != nil {
glog.Errorf("start pprof service error: %v", err)
}
running = false
}()
case syscall.SIGUSR2:
glog.Info("SIGUSR2 hited, to stop http pprof service")
if running {
//go 1.8 support srv.Shutdown
err := srv.Shutdown(nil)
if err != nil {
glog.Errorf("pprof stop httpserver error: %s", err)
}
}
case syscall.SIGSTOP:
exitCode := 0 exitCode := 0
if running {
//go 1.8 support srv.Shutdown
err := srv.Shutdown(nil)
if err != nil {
glog.Errorf("pprof stop httpserver error: %s", err)
}
}
if err := ngx.Stop(); err != nil { if err := ngx.Stop(); err != nil {
glog.Infof("Error during shutdown %v", err) glog.Infof("Error during shutdown %v", err)
exitCode = 1 exitCode = 1
@ -56,4 +91,6 @@ func handleSigterm(ngx *controller.NGINXController) {
glog.Infof("Exiting with %v", exitCode) glog.Infof("Exiting with %v", exitCode)
os.Exit(exitCode) os.Exit(exitCode)
}
}
} }