forked from TrueCloudLab/rclone
57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
|
|
"github.com/okzk/sdnotify"
|
|
)
|
|
|
|
func reload() {
|
|
// Tells the service manager that the service is reloading its configuration.
|
|
sdnotify.Reloading()
|
|
|
|
log.Println("reloading...")
|
|
time.Sleep(time.Second)
|
|
log.Println("reloaded.")
|
|
|
|
// The service must also send a "READY" notification when it completed reloading its configuration.
|
|
sdnotify.Ready()
|
|
}
|
|
|
|
func main() {
|
|
log.Println("starting...")
|
|
time.Sleep(time.Second)
|
|
log.Println("started.")
|
|
|
|
// Tells the service manager that service startup is finished.
|
|
sdnotify.Ready()
|
|
|
|
go func() {
|
|
tick := time.Tick(30 * time.Second)
|
|
for {
|
|
<-tick
|
|
log.Println("watchdog reporting")
|
|
sdnotify.Watchdog()
|
|
}
|
|
}()
|
|
|
|
sigCh := make(chan os.Signal, 1)
|
|
signal.Notify(sigCh, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
|
|
for sig := range sigCh {
|
|
if sig == syscall.SIGHUP {
|
|
reload()
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
|
|
// Tells the service manager that the service is beginning its shutdown.
|
|
sdnotify.Stopping()
|
|
|
|
log.Println("existing...")
|
|
time.Sleep(time.Second)
|
|
}
|