feat: catch Interrupt and SIGTERM signals to ensure plugin quitted

This commit is contained in:
debugtalk
2022-01-18 17:33:26 +08:00
parent 9a1d02c7b2
commit 142bc13c94
2 changed files with 16 additions and 0 deletions

View File

@@ -137,6 +137,7 @@ func (p *HashicorpPlugin) Call(funcName string, args ...interface{}) (interface{
func (p *HashicorpPlugin) Quit() error {
// kill hashicorp plugin process
log.Warn().Msg("quit hashicorp plugin process")
pluginHost.Quit()
return nil
}

View File

@@ -9,8 +9,11 @@ import (
"net/http"
"net/http/httputil"
"net/url"
"os"
"os/signal"
"strconv"
"strings"
"syscall"
"testing"
"time"
@@ -213,6 +216,18 @@ func initPlugin(path string) (plugin common.Plugin, err error) {
go ga.SendEvent(event)
}()
plugin, err = common.Init(path)
// catch Interrupt and SIGTERM signals to ensure plugin quitted
c := make(chan os.Signal)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() {
<-c
if plugin != nil {
plugin.Quit()
}
os.Exit(1)
}()
return
}