chore(main): let system handle OS signals after first one to stop program
This commit is contained in:
@@ -98,11 +98,13 @@ func main() {
|
|||||||
errorCh <- _main(ctx, buildInfo, args, logger, reader, tun, netLinker, cmder, cli)
|
errorCh <- _main(ctx, buildInfo, args, logger, reader, tun, netLinker, cmder, cli)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
// Wait for OS signal or run error
|
||||||
var err error
|
var err error
|
||||||
select {
|
select {
|
||||||
case signal := <-signalCh:
|
case receivedSignal := <-signalCh:
|
||||||
|
signal.Stop(signalCh)
|
||||||
fmt.Println("")
|
fmt.Println("")
|
||||||
logger.Warn("Caught OS signal " + signal.String() + ", shutting down")
|
logger.Warn("Caught OS signal " + receivedSignal.String() + ", shutting down")
|
||||||
cancel()
|
cancel()
|
||||||
case err = <-errorCh:
|
case err = <-errorCh:
|
||||||
close(errorCh)
|
close(errorCh)
|
||||||
@@ -113,15 +115,14 @@ func main() {
|
|||||||
cancel()
|
cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Shutdown timed sequence, and force exit on second OS signal
|
||||||
const shutdownGracePeriod = 5 * time.Second
|
const shutdownGracePeriod = 5 * time.Second
|
||||||
timer := time.NewTimer(shutdownGracePeriod)
|
timer := time.NewTimer(shutdownGracePeriod)
|
||||||
select {
|
select {
|
||||||
case shutdownErr := <-errorCh:
|
case shutdownErr := <-errorCh:
|
||||||
if !timer.Stop() {
|
timer.Stop()
|
||||||
<-timer.C
|
|
||||||
}
|
|
||||||
if shutdownErr != nil {
|
if shutdownErr != nil {
|
||||||
logger.Warnf("Shutdown not completed gracefully: %s", shutdownErr)
|
logger.Warnf("Shutdown failed: %s", shutdownErr)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,9 +134,6 @@ func main() {
|
|||||||
case <-timer.C:
|
case <-timer.C:
|
||||||
logger.Warn("Shutdown timed out")
|
logger.Warn("Shutdown timed out")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
case signal := <-signalCh:
|
|
||||||
logger.Warn("Caught OS signal " + signal.String() + ", forcing shut down")
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user