diff --git a/cmd/rc-arduino/rc-arduino.go b/cmd/rc-arduino/rc-arduino.go index e987603..6e2e295 100644 --- a/cmd/rc-arduino/rc-arduino.go +++ b/cmd/rc-arduino/rc-arduino.go @@ -6,6 +6,8 @@ import ( "github.com/cyrilix/robocar-base/cli" "go.uber.org/zap" "log" + "os/signal" + "syscall" "os" ) @@ -70,9 +72,7 @@ func main() { log.Fatalf("unable to init logger: %v", err) } defer func() { - if err := lgr.Sync(); err != nil { - log.Printf("unable to Sync logger: %v\n", err) - } + _ = lgr.Sync() }() zap.ReplaceGlobals(lgr) @@ -80,12 +80,24 @@ func main() { if err != nil { zap.S().Fatalf("unable to connect to mqtt broker: %v", err) } - defer client.Disconnect(10) + defer func() { + zap.S().Infof("disconnect mqtt connection") + client.Disconnect(10) + }() sc := arduino.NewAsymetricPWMSteeringConfig(steeringLeftPWM, steeringRightPWM, steeringCenterPWM) a := arduino.NewPart(client, device, baud, throttleTopic, steeringTopic, driveModeTopic, switchRecordTopic, pubFrequency, sc) - err = a.Start() - if err != nil { - zap.S().Errorw("unable to start service", "error", err) - } + + go func() { + err = a.Start() + if err != nil { + zap.S().Panicw("unable to start service", "error", err) + } + }() + defer a.Stop() + + exitChan := make(chan os.Signal) + signal.Notify(exitChan, syscall.SIGTERM) + <-exitChan + zap.S().Info("exit on sigterm") }