...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package servecmd
19
20 import (
21 "log"
22 "os"
23 "os/signal"
24 "syscall"
25
26 "github.com/sassoftware/relic/server/daemon"
27 )
28
29 func watchSignals(srv *daemon.Daemon) {
30 ch := make(chan os.Signal, 4)
31 signal.Notify(
32 ch,
33 syscall.SIGINT,
34 syscall.SIGTERM,
35 syscall.SIGQUIT,
36 syscall.SIGUSR1,
37 syscall.SIGUSR2,
38 )
39 already := false
40 for {
41 sig := <-ch
42 switch {
43 case sig == syscall.SIGUSR1:
44 if err := srv.ReopenLogger(); err != nil {
45 log.Printf("Failed to reopen logs: %s", err)
46 }
47 case !already:
48 log.Printf("Received signal %d; shutting down gracefully", sig)
49 if err := srv.Close(); err != nil {
50 log.Printf("ERROR: failed to shutdown gracefully: %s", err)
51 }
52 already = true
53 default:
54 log.Printf("Received signal %d; shutting down immediately", sig)
55 os.Exit(0)
56 }
57 }
58 }
59
View as plain text