diff --git a/main.go b/main.go index 2a1d585..d2ba1b1 100644 --- a/main.go +++ b/main.go @@ -78,22 +78,25 @@ func handleConnection(conn net.Conn) { func runCommand(args ...string) error { cmd := exec.Command(args[0], args[1:]...) - if err := cmd.Run(); err != nil { - return err + + if output, err := cmd.CombinedOutput(); err != nil { + return fmt.Errorf("%w: %s", err, output) } return nil } func setupSystemdService() error { - // copy itself to /usr/bin + if _, err := os.Stat("/usr/local/bin/stats-server"); err == nil { + log.Println("binary already exists in /usr/local/bin, updating...") + } + log.Println("copying itself to /usr/local/bin/stats-server") - if err := runCommand("cp", os.Args[0], "/usr/local/bin/stats-server"); err != nil { + if err := runCommand("cp", "-f", os.Args[0], "/usr/local/bin/stats-server"); err != nil { return err } - // write systemd service unit - log.Println("generating /etc/systemd/system/stats-server.service") + log.Println("writing unit to /etc/systemd/system/stats-server.service") if err := os.WriteFile( "/etc/systemd/system/stats-server.service", []byte(systemdServiceUnit), @@ -102,15 +105,18 @@ func setupSystemdService() error { return err } - // reload systemd log.Println("running systemctl daemon-reload") if err := runCommand("systemctl", "daemon-reload"); err != nil { return err } - // enable and start the service - log.Println("running systemctl enable --now stats-server.service") - if err := runCommand("systemctl", "enable", "--now", "stats-server.service"); err != nil { + log.Println("running systemctl enable stats-server.service") + if err := runCommand("systemctl", "enable", "stats-server.service"); err != nil { + return err + } + + log.Println("running systemctl (re)start stats-server.service") + if err := runCommand("systemctl", "restart", "stats-server.service"); err != nil { return err }