Logo

0x5a.live

for different kinds of informations and explorations.

GitHub - ztrue/shutdown: Golang app shutdown hooks.

Golang app shutdown hooks. Contribute to ztrue/shutdown development by creating an account on GitHub.

Visit SiteGitHub - ztrue/shutdown: Golang app shutdown hooks.

GitHub - ztrue/shutdown: Golang app shutdown hooks.

Golang app shutdown hooks. Contribute to ztrue/shutdown development by creating an account on GitHub.

Powered by 0x5a.live ๐Ÿ’—

Golang App Shutdown Hooks

GoDoc Report Coverage Status Build Status

This package provides convenient interface for working with os.Signal.

Multiple hooks can be applied, they will be called simultaneously on app shutdown.

Example

package main

import (
	"log"
	"time"

	"github.com/ztrue/shutdown"
)

func main() {
	shutdown.Add(func() {
		// Write log.
		// Stop writing files.
		// Close connections.
		// Etc.
		log.Println("Stopping...")
		log.Println("3")
		time.Sleep(time.Second)
		log.Println("2")
		time.Sleep(time.Second)
		log.Println("1")
		time.Sleep(time.Second)
		log.Println("0, stopped")
	})

	// App emulation.
	go func() {
		log.Println("App running, press CTRL + C to stop")
		select {}
	}()

	shutdown.Listen()
}

Find more executable examples in examples dir.

How to Use

Import

import "github.com/ztrue/shutdown"

Add Shutdown Hook

shutdown.Add(func() {
	log.Println("Stopping")
})

Remove Hook

key := shutdown.Add(func() {
	log.Println("Stopping")
})

shutdown.Remove(key)

Hook With Custom Key

shutdown.AddWithKey("mykey", func() {
	log.Println("Stopping")
})

shutdown.Remove("mykey")

Hook With Signal Parameter

shutdown.AddWithParam(func(os.Signal) {
	log.Println("Stopping because of", os.Signal)
})

Listen for Specific Signals

shutdown.Listen(syscall.SIGINT, syscall.SIGTERM)

Reload

Reload service on SIGHUP

	shutdown.AddWithParam(func(sig os.Signal) {
		if sig == syscall.SIGHUP {
			log.Println( "Reload conf...")
			reloadConf()
			// listen again signals to avoid shutdown
			shutdown.Listen(syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP)
		} else { // SIGINT, SIGTERM
			log.Println("Stopping...")
		}
	})
	shutdown.Listen(syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP)

GoLang Resources

are all listed below.

Resources

listed to get explored on!!

Made with โค๏ธ

to provide different kinds of informations and resources.