package cmd import ( "log/slog" "os" "syscall" "git.oblat.lv/alex/triggerssmith/internal/vars" "github.com/spf13/cobra" ) var optsStopCmd = struct { Debug *bool PID *int }{} var stopCmd = &cobra.Command{ Use: "stop", Short: "Stop active server by PID using SIGTERM", Run: func(cmd *cobra.Command, args []string) { defer func() { if r := recover(); r != nil { slog.Error("Application panicked", slog.Any("error", r)) } }() // configure logger if *optsReloadCmd.Debug { slog.SetDefault(slog.New(slog.NewTextHandler(cmd.OutOrStdout(), &slog.HandlerOptions{Level: slog.LevelDebug, AddSource: true}))) } else { slog.SetDefault(slog.New(slog.NewTextHandler(cmd.OutOrStdout(), &slog.HandlerOptions{Level: slog.LevelInfo}))) } pid, err := readPID(vars.PID_PATH) if err != nil { panic(err) } *optsStopCmd.PID = pid slog.Debug("restarting server", slog.Int("pid", *optsStopCmd.PID)) proc, err := os.FindProcess(*optsStopCmd.PID) if err != nil { slog.Error("failed to find process", slog.Int("pid", *optsStopCmd.PID), slog.String("err", err.Error())) } proc.Signal(syscall.SIGTERM) slog.Debug("done") }, } func init() { optsStopCmd.Debug = stopCmd.Flags().BoolP("debug", "d", false, "Enable debug logs") optsStopCmd.PID = stopCmd.Flags().IntP("pid", "p", -1, "Define server PID") rootCmd.AddCommand(stopCmd) }