mirror of
https://github.com/adnanh/webhook.git
synced 2025-06-24 21:38:32 +00:00
If webhook is restarted with the same settings but the socket file has not been deleted, webhook will be unable to bind and will exit with an error.
63 lines
1.2 KiB
Go
63 lines
1.2 KiB
Go
//go:build !windows
|
|
// +build !windows
|
|
|
|
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"strings"
|
|
"syscall"
|
|
)
|
|
|
|
func setupSignals() {
|
|
log.Printf("setting up os signal watcher\n")
|
|
|
|
signals = make(chan os.Signal, 1)
|
|
signal.Notify(signals, syscall.SIGUSR1)
|
|
signal.Notify(signals, syscall.SIGHUP)
|
|
signal.Notify(signals, syscall.SIGTERM)
|
|
signal.Notify(signals, os.Interrupt)
|
|
|
|
go watchForSignals()
|
|
}
|
|
|
|
func watchForSignals() {
|
|
log.Println("os signal watcher ready")
|
|
|
|
for {
|
|
sig := <-signals
|
|
switch sig {
|
|
case syscall.SIGUSR1:
|
|
log.Println("caught USR1 signal")
|
|
reloadAllHooks()
|
|
|
|
case syscall.SIGHUP:
|
|
log.Println("caught HUP signal")
|
|
reloadAllHooks()
|
|
|
|
case os.Interrupt, syscall.SIGTERM:
|
|
log.Printf("caught %s signal; exiting\n", sig)
|
|
if pidFile != nil {
|
|
err := pidFile.Remove()
|
|
if err != nil {
|
|
log.Print(err)
|
|
}
|
|
}
|
|
if socket != "" && !strings.HasPrefix(socket, "@") {
|
|
// we've been listening on a named Unix socket, delete it
|
|
// before we exit so subsequent runs can re-bind the same
|
|
// socket path
|
|
err := os.Remove(socket)
|
|
if err != nil {
|
|
log.Printf("Failed to remove socket file %s: %v", socket, err)
|
|
}
|
|
}
|
|
os.Exit(0)
|
|
|
|
default:
|
|
log.Printf("caught unhandled signal %+v\n", sig)
|
|
}
|
|
}
|
|
}
|