https://github.com/appleboy/graceful
graceful shutdown package when a service is turned off by software function
https://github.com/appleboy/graceful
golang golang-package graceful graceful-shutdown graceful-stop
Last synced: 7 months ago
JSON representation
graceful shutdown package when a service is turned off by software function
- Host: GitHub
- URL: https://github.com/appleboy/graceful
- Owner: appleboy
- License: mit
- Created: 2022-01-02T07:30:04.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2024-09-07T07:35:18.000Z (about 1 year ago)
- Last Synced: 2024-10-29T10:08:02.745Z (12 months ago)
- Topics: golang, golang-package, graceful, graceful-shutdown, graceful-stop
- Language: Go
- Homepage:
- Size: 58.6 KB
- Stars: 58
- Watchers: 4
- Forks: 9
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# graceful
[](https://github.com/appleboy/graceful/actions/workflows/go.yml)
[](https://codecov.io/gh/appleboy/graceful)
[](https://goreportcard.com/report/github.com/appleboy/graceful)
[](https://pkg.go.dev/github.com/gin-contrib/graceful)Graceful shutdown package when a service is turned off by software function.
## Example
Add running job
```go
package mainimport (
"context"
"log"
"time""github.com/appleboy/graceful"
)func main() {
m := graceful.NewManager()// Add job 01
m.AddRunningJob(func(ctx context.Context) error {
for {
select {
case <-ctx.Done():
return nil
default:
log.Println("working job 01")
time.Sleep(1 * time.Second)
}
}
})// Add job 02
m.AddRunningJob(func(ctx context.Context) error {
for {
select {
case <-ctx.Done():
return nil
default:
log.Println("working job 02")
time.Sleep(500 * time.Millisecond)
}
}
})<-m.Done()
}
```You can also add shutdown jobs.
```go
package mainimport (
"context"
"log"
"time""github.com/appleboy/graceful"
)func main() {
m := graceful.NewManager()// Add job 01
m.AddRunningJob(func(ctx context.Context) error {
for {
select {
case <-ctx.Done():
return nil
default:
log.Println("working job 01")
time.Sleep(1 * time.Second)
}
}
})// Add job 02
m.AddRunningJob(func(ctx context.Context) error {
for {
select {
case <-ctx.Done():
return nil
default:
log.Println("working job 02")
time.Sleep(500 * time.Millisecond)
}
}
})// Add shutdown 01
m.AddShutdownJob(func() error {
log.Println("shutdown job 01 and wait 1 second")
time.Sleep(1 * time.Second)
return nil
})// Add shutdown 02
m.AddShutdownJob(func() error {
log.Println("shutdown job 02 and wait 2 second")
time.Sleep(2 * time.Second)
return nil
})<-m.Done()
}
```Using custom logger, see the [zerolog example](./_example/example03/logger.go)
```go
m := graceful.NewManager(
graceful.WithLogger(logger{}),
)
```get [more information](./_example/example03/main.go)