diff --git a/apps/nsqd/main.go b/apps/nsqd/main.go index 3e22d74a2..c9a6b9bd3 100644 --- a/apps/nsqd/main.go +++ b/apps/nsqd/main.go @@ -6,8 +6,6 @@ import ( "fmt" "math/rand" "os" - "os/signal" - "path/filepath" "sync" "syscall" "time" @@ -27,21 +25,12 @@ type program struct { func main() { prg := &program{} - // SIGTERM handling is in Start() - if err := svc.Run(prg, syscall.SIGINT); err != nil { + if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil { logFatal("%s", err) } } func (p *program) Init(env svc.Environment) error { - if env.IsWindowsService() { - dir := filepath.Dir(os.Args[0]) - return os.Chdir(dir) - } - return nil -} - -func (p *program) Start() error { opts := nsqd.NewOptions() flagSet := nsqdFlagSet(opts) @@ -72,7 +61,11 @@ func (p *program) Start() error { } p.nsqd = nsqd - err = p.nsqd.LoadMetadata() + return nil +} + +func (p *program) Start() error { + err := p.nsqd.LoadMetadata() if err != nil { logFatal("failed to load metadata - %s", err) } @@ -81,19 +74,6 @@ func (p *program) Start() error { logFatal("failed to persist metadata - %s", err) } - signalChan := make(chan os.Signal, 1) - go func() { - // range over all term signals - // we don't want to un-register our sigterm handler which would - // cause default go behavior to apply - for range signalChan { - p.once.Do(func() { - p.nsqd.Exit() - }) - } - }() - signal.Notify(signalChan, syscall.SIGTERM) - go func() { err := p.nsqd.Main() if err != nil { @@ -112,6 +92,10 @@ func (p *program) Stop() error { return nil } +func (p *program) Handle(s os.Signal) error { + return svc.ErrStop +} + // Context returns a context that will be canceled when nsqd initiates the shutdown func (p *program) Context() context.Context { return p.nsqd.Context() diff --git a/go.mod b/go.mod index aacdacdd6..37309861e 100644 --- a/go.mod +++ b/go.mod @@ -16,3 +16,5 @@ require ( github.com/nsqio/go-diskqueue v1.0.0 github.com/nsqio/go-nsq v1.0.8 ) + +replace github.com/judwhite/go-svc => github.com/mreiferson/go-svc v1.2.2-0.20210815184239-7a96e00010f6 diff --git a/go.sum b/go.sum index e18a620ed..3016274a8 100644 --- a/go.sum +++ b/go.sum @@ -19,6 +19,8 @@ github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4d github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/mreiferson/go-options v1.0.0 h1:RMLidydGlDWpL+lQTXo0bVIf/XT2CTq7AEJMoz5/VWs= github.com/mreiferson/go-options v1.0.0/go.mod h1:zHtCks/HQvOt8ATyfwVe3JJq2PPuImzXINPRTC03+9w= +github.com/mreiferson/go-svc v1.2.2-0.20210815184239-7a96e00010f6 h1:NbuBXARvEXrYZ1SzN53ZpObeuwGhl1zvs/C+kzCggrQ= +github.com/mreiferson/go-svc v1.2.2-0.20210815184239-7a96e00010f6/go.mod h1:mo/P2JNX8C07ywpP9YtO2gnBgnUiFTHqtsZekJrUuTk= github.com/nsqio/go-diskqueue v1.0.0 h1:XRqpx7zTMu9yNVH+cHvA5jEiPNKoYcyEsCVqXP3eFg4= github.com/nsqio/go-diskqueue v1.0.0/go.mod h1:INuJIxl4ayUsyoNtHL5+9MFPDfSZ0zY93hNY6vhBRsI= github.com/nsqio/go-nsq v1.0.8 h1:3L2F8tNLlwXXlp2slDUrUWSBn2O3nMh8R1/KEDFTHPk=