From 897b260fe96a57939b4c0b5ac3d853e33c6b762e Mon Sep 17 00:00:00 2001 From: Dan Fuhry Date: Thu, 25 Apr 2024 00:09:40 -0400 Subject: [PATCH] machines_agent: allow starting/stopping/restarting services from machines_agent cmd --- machines/machines_agent/main.go | 46 +++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/machines/machines_agent/main.go b/machines/machines_agent/main.go index 08efb19..9093137 100644 --- a/machines/machines_agent/main.go +++ b/machines/machines_agent/main.go @@ -22,6 +22,8 @@ func main() { templateToRender := flag.String("render", "", "render this template to stdout and exit") commitIPAddress := flag.String("ip-address", "", "passed by dhcpd when a host is seen") commitMACAddress := flag.String("mac-address", "", "passed by dhcpd when a host is seen") + service := flag.String("service.name", "", "if specified, does something with a service (see service.op)") + serviceOp := flag.String("service.op", "status", "service operation to perform (start, stop, status)") renderAll := flag.Bool("render-all", false, "render all files") flag.Parse() @@ -32,6 +34,50 @@ func main() { logger.Panic(err) } + if *service != "" { + svc := machines.GetService(*service) + if svc == nil { + logger.Panicf("no such service: %s", *service) + return + } + switch strings.ToLower(*serviceOp) { + case "start": + logger.Infof("starting service: %s", *service) + err = svc.EnsureStarted() + if err != nil { + logger.Panicf("failed to start service %q: %v", *service, err) + } + logger.Infof("service started: %s", *service) + case "stop": + logger.Infof("stopping service: %s", *service) + err = svc.EnsureStopped() + if err != nil { + logger.Panicf("failed to stop service %q: %v", *service, err) + } + logger.Infof("service stopped: %s", *service) + case "reload", "restart": + logger.Infof("restarting service: %s", *service) + err = svc.ReloadOrRestart(true) + if err != nil { + logger.Panicf("failed to restart service %q: %v", *service, err) + } + logger.Infof("service restarted: %s", *service) + case "status", "check": + status, err := svc.Status() + if err != nil { + logger.Panicf("failed to query status of service %q: %v", *service, err) + } + if status.Running { + logger.Infof("%s is running, pid %d", *service, status.Pid) + } else { + logger.Infof("%s is stopped", *service) + } + default: + logger.Panicf("unknown operation: %s", *serviceOp) + } + return + } + if *commitIPAddress != "" && *commitMACAddress != "" { url := fmt.Sprintf("host/seen/%s/%s", *commitMACAddress, *commitIPAddress) host := &machines.Host{} -- 2.50.1