Better exit handling

This commit is contained in:
Quentin McGaw
2020-04-29 01:27:42 +00:00
parent b0ea739c20
commit a033637e85

View File

@@ -5,7 +5,9 @@ import (
"fmt" "fmt"
"net" "net"
"os" "os"
"os/signal"
"strings" "strings"
"syscall"
"time" "time"
"github.com/qdm12/golibs/command" "github.com/qdm12/golibs/command"
@@ -13,7 +15,6 @@ import (
libhealthcheck "github.com/qdm12/golibs/healthcheck" libhealthcheck "github.com/qdm12/golibs/healthcheck"
"github.com/qdm12/golibs/logging" "github.com/qdm12/golibs/logging"
"github.com/qdm12/golibs/network" "github.com/qdm12/golibs/network"
"github.com/qdm12/golibs/signals"
"github.com/qdm12/private-internet-access-docker/internal/alpine" "github.com/qdm12/private-internet-access-docker/internal/alpine"
"github.com/qdm12/private-internet-access-docker/internal/constants" "github.com/qdm12/private-internet-access-docker/internal/constants"
"github.com/qdm12/private-internet-access-docker/internal/dns" "github.com/qdm12/private-internet-access-docker/internal/dns"
@@ -269,20 +270,31 @@ func main() {
} }
} }
}() }()
signals.WaitForExit(func(signal string) int { signalsCh := make(chan os.Signal, 1)
signal.Notify(signalsCh,
syscall.SIGINT,
syscall.SIGTERM,
os.Interrupt,
)
select {
case signal := <-signalsCh:
logger.Warn("Caught OS signal %s, shutting down", signal) logger.Warn("Caught OS signal %s, shutting down", signal)
if allSettings.VPNSP == "pia" && allSettings.PIA.PortForwarding.Enabled { cancel()
if err := piaConf.ClearPortForward(allSettings.PIA.PortForwarding.Filepath, allSettings.System.UID, allSettings.System.GID); err != nil { case <-ctx.Done():
logger.Error(err) logger.Warn("context canceled, shutting down")
} }
} if allSettings.PIA.PortForwarding.Enabled {
logger.Info("Waiting for processes to exit...") if err := piaConf.ClearPortForward(allSettings.PIA.PortForwarding.Filepath, allSettings.System.UID, allSettings.System.GID); err != nil {
errors := waiter.WaitForAll()
for _, err := range errors {
logger.Error(err) logger.Error(err)
} }
return 0 }
}) errors := waiter.WaitForAll()
for _, err := range errors {
logger.Error(err)
}
if err := logger.Sync(); err != nil {
panic(err)
}
} }
func onConnected( func onConnected(