/* * SPDX-License-Identifier: AGPL-3.0-only * Copyright (c) 2022-2024, daeuniverse Organization */ package cmd import ( "fmt" "os" "strconv" "strings" "syscall" "github.com/daeuniverse/dae/cmd/internal" "github.com/spf13/cobra" ) var ( suspendCmd = &cobra.Command{ Use: "suspend [pid]", Short: "To suspend dae. This command puts dae into no-load state. Recover it by 'dae reload'.", Run: func(cmd *cobra.Command, args []string) { internal.AutoSu() if len(args) == 0 { _pid, err := os.ReadFile(PidFilePath) if err != nil { fmt.Println("Failed to read pid file:", err) os.Exit(1) } args = []string{strings.TrimSpace(string(_pid))} } pid, err := strconv.Atoi(args[0]) if err != nil { cmd.Help() os.Exit(1) } if abort { if f, err := os.Create(AbortFile); err == nil { f.Close() } } if err = syscall.Kill(pid, syscall.SIGUSR2); err != nil { fmt.Println(err) os.Exit(1) } fmt.Println("OK") }, } ) func init() { rootCmd.AddCommand(suspendCmd) suspendCmd.PersistentFlags().BoolVarP(&abort, "abort", "a", false, "Abort established connections.") }