Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ztrue/shutdown
Golang app shutdown hooks.
https://github.com/ztrue/shutdown
go golang hooks shutdown signal
Last synced: 4 days ago
JSON representation
Golang app shutdown hooks.
- Host: GitHub
- URL: https://github.com/ztrue/shutdown
- Owner: ztrue
- License: mit
- Created: 2018-11-17T17:56:03.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2022-01-15T22:23:00.000Z (almost 3 years ago)
- Last Synced: 2024-11-17T22:36:26.742Z (about 1 month ago)
- Topics: go, golang, hooks, shutdown, signal
- Language: Go
- Homepage:
- Size: 12.7 KB
- Stars: 59
- Watchers: 1
- Forks: 7
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-go-extra - shutdown - 11-17T17:56:03Z|2022-01-15T22:23:00Z| (Utilities / Fail injection)
README
# Golang App Shutdown Hooks
[![GoDoc](https://godoc.org/github.com/ztrue/shutdown?status.svg)](https://godoc.org/github.com/ztrue/shutdown)
[![Report](https://goreportcard.com/badge/github.com/ztrue/shutdown)](https://goreportcard.com/report/github.com/ztrue/shutdown)
[![Coverage Status](https://coveralls.io/repos/github/ztrue/shutdown/badge.svg?branch=master)](https://coveralls.io/github/ztrue/shutdown?branch=master)
[![Build Status](https://travis-ci.com/ztrue/shutdown.svg?branch=master)](https://travis-ci.com/ztrue/shutdown)This package provides convenient interface for working with `os.Signal`.
Multiple hooks can be applied, they will be called simultaneously on app shutdown.
## Example
```go
package mainimport (
"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](examples) dir.
## How to Use
### Import
```go
import "github.com/ztrue/shutdown"
```### Add Shutdown Hook
```go
shutdown.Add(func() {
log.Println("Stopping")
})
```### Remove Hook
```go
key := shutdown.Add(func() {
log.Println("Stopping")
})shutdown.Remove(key)
```### Hook With Custom Key
```go
shutdown.AddWithKey("mykey", func() {
log.Println("Stopping")
})shutdown.Remove("mykey")
```### Hook With Signal Parameter
```go
shutdown.AddWithParam(func(os.Signal) {
log.Println("Stopping because of", os.Signal)
})
```### Listen for Specific Signals
```go
shutdown.Listen(syscall.SIGINT, syscall.SIGTERM)
```### Reload
Reload service on `SIGHUP`
```go
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)
```