Browse Source

Check configuration before reload

世界 3 years ago
parent
commit
88469d4aaa
1 changed files with 17 additions and 7 deletions
  1. 17 7
      cmd/sing-box/cmd_run.go

+ 17 - 7
cmd/sing-box/cmd_run.go

@@ -79,19 +79,29 @@ func create() (*box.Box, context.CancelFunc, error) {
 }
 
 func run() error {
+	osSignals := make(chan os.Signal, 1)
+	signal.Notify(osSignals, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)
 	for {
 		instance, cancel, err := create()
 		if err != nil {
 			return err
 		}
 		runtimeDebug.FreeOSMemory()
-		osSignals := make(chan os.Signal, 1)
-		signal.Notify(osSignals, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP)
-		osSignal := <-osSignals
-		cancel()
-		instance.Close()
-		if osSignal != syscall.SIGHUP {
-			return nil
+		for {
+			osSignal := <-osSignals
+			if osSignal == syscall.SIGHUP {
+				err = check()
+				if err != nil {
+					log.Error(E.Cause(err, "reload service"))
+					continue
+				}
+			}
+			cancel()
+			instance.Close()
+			if osSignal != syscall.SIGHUP {
+				return nil
+			}
+			break
 		}
 	}
 }