signals.go

 1package daemon
 2
 3import (
 4	"log"
 5	"os"
 6	"os/signal"
 7	"syscall"
 8)
 9
10// handleSignals listens for OS signals and triggers daemon actions.
11// SIGTERM/SIGINT → graceful shutdown
12// SIGHUP → config reload
13func (d *Daemon) handleSignals() {
14	ch := make(chan os.Signal, 1)
15	signal.Notify(ch, syscall.SIGTERM, syscall.SIGINT, syscall.SIGHUP)
16
17	for {
18		select {
19		case sig := <-ch:
20			switch sig {
21			case syscall.SIGTERM, syscall.SIGINT:
22				log.Println("daemon: received shutdown signal")
23				d.Shutdown()
24				return
25			case syscall.SIGHUP:
26				log.Println("daemon: received SIGHUP, reloading config")
27				if err := d.ReloadConfig(); err != nil {
28					log.Printf("daemon: config reload failed: %v", err)
29				}
30			}
31		case <-d.shutdown:
32			return
33		}
34	}
35}