go-srvc / mods / sigmod

github.com/go-srvc/mods/sigmod

pkg.go.dev source
go get github.com/go-srvc/mods/sigmod@v1.0.2

README

sigmod

sigmod listens for OS signals and returns from Run when one is received, triggering srvc shutdown.

package main

import (
	"fmt"
	"net/http"
	"os"
	"syscall"

	"github.com/go-srvc/mods/httpmod"
	"github.com/go-srvc/mods/sigmod"
	"github.com/go-srvc/srvc"
)

func main() {
	srvc.RunAndExit(
		// Trigger graceful shutdown of all modules on SIGINT or SIGTERM.
		sigmod.New(os.Interrupt, syscall.SIGTERM),
		httpmod.New(
			httpmod.WithAddr(":8080"),
			httpmod.WithHandler(http.HandlerFunc(hello)),
		),
	)
}

func hello(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, "hello, world")
}

Overview

Package sigmod provides signal listening as a module.

Constants

const ID = "sigmod"

Types

type Listener

type Listener struct {
	// contains filtered or unexported fields
}

func (*Listener) ID

func (l *Listener) ID() string

func (*Listener) Init

func (l *Listener) Init() error

func (*Listener) Run

func (l *Listener) Run() error

func (*Listener) Stop

func (l *Listener) Stop() error

Examples

ExampleNew

package main

import (
	"os"
	"syscall"
	"time"

	"github.com/go-srvc/mods/sigmod"
	"github.com/go-srvc/srvc"
)

func main() {
	//nolint: errcheck
	go func() {
		// Send SIGINT after 1 second.
		time.Sleep(time.Second)
		p, _ := os.FindProcess(syscall.Getegid())
		p.Signal(os.Interrupt)
	}()

	srvc.RunAndExit(
		sigmod.New(os.Interrupt),
	)
}