mirror of
https://github.com/navidrome/navidrome.git
synced 2025-04-04 21:17:37 +03:00
51 lines
1,023 B
Go
51 lines
1,023 B
Go
//go:build unix
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
|
|
"github.com/navidrome/navidrome/log"
|
|
)
|
|
|
|
const triggerScanSignal = syscall.SIGUSR1
|
|
|
|
func startSignaler(ctx context.Context) func() error {
|
|
log.Info(ctx, "Starting signaler")
|
|
scanner := GetScanner()
|
|
|
|
return func() error {
|
|
var sigChan = make(chan os.Signal, 1)
|
|
signal.Notify(
|
|
sigChan,
|
|
os.Interrupt,
|
|
triggerScanSignal,
|
|
syscall.SIGHUP,
|
|
syscall.SIGTERM,
|
|
syscall.SIGABRT,
|
|
)
|
|
|
|
for {
|
|
select {
|
|
case sig := <-sigChan:
|
|
if sig != triggerScanSignal {
|
|
log.Info(ctx, "Received termination signal", "signal", sig)
|
|
return interrupted
|
|
}
|
|
log.Info(ctx, "Received signal, triggering a new scan", "signal", sig)
|
|
start := time.Now()
|
|
err := scanner.RescanAll(ctx, false)
|
|
if err != nil {
|
|
log.Error(ctx, "Error scanning", err)
|
|
}
|
|
log.Info(ctx, "Triggered scan complete", "elapsed", time.Since(start).Round(100*time.Millisecond))
|
|
case <-ctx.Done():
|
|
return nil
|
|
}
|
|
}
|
|
}
|
|
}
|