diff --git a/cmd/uncloud/service/start.go b/cmd/uncloud/service/start.go index 4a1c1121..ce1f75b3 100644 --- a/cmd/uncloud/service/start.go +++ b/cmd/uncloud/service/start.go @@ -19,8 +19,11 @@ func NewStartCommand(groupID string) *cobra.Command { cmd := &cobra.Command{ Use: "start SERVICE [SERVICE...]", Short: "Start one or more services.", - Long: "Start one or more services.", - Args: cobra.MinimumNArgs(1), + Long: `Start one or more previously stopped services. + +Starts all containers of the specified service(s) across all machines in the cluster. +Services can be specified by name or ID.`, + Args: cobra.MinimumNArgs(1), RunE: func(cmd *cobra.Command, args []string) error { uncli := cmd.Context().Value("cli").(*cli.CLI) opts.services = args diff --git a/cmd/uncloud/service/stop.go b/cmd/uncloud/service/stop.go index aad49c1f..6c03fcc5 100644 --- a/cmd/uncloud/service/stop.go +++ b/cmd/uncloud/service/stop.go @@ -12,10 +12,9 @@ import ( ) type stopOptions struct { - services []string - signal string - timeoutChanged bool - timeout int + services []string + signal string + timeout int } func NewStopCommand(groupID string) *cobra.Command { @@ -23,18 +22,24 @@ func NewStopCommand(groupID string) *cobra.Command { cmd := &cobra.Command{ Use: "stop SERVICE [SERVICE...]", Short: "Stop one or more services.", - Long: "Stop one or more services.", - Args: cobra.MinimumNArgs(1), + Long: `Stop one or more running services. + +Gracefully stops all containers of the specified service(s) across all machines in the cluster. +Services can be specified by name or ID. Stopped services can be restarted with 'uc start'.`, + Args: cobra.MinimumNArgs(1), RunE: func(cmd *cobra.Command, args []string) error { uncli := cmd.Context().Value("cli").(*cli.CLI) opts.services = args - opts.timeoutChanged = cmd.Flags().Changed("timeout") return stop(cmd.Context(), uncli, opts) }, GroupID: groupID, } - cmd.Flags().StringVarP(&opts.signal, "signal", "s", "", "Signal to send to the container") - cmd.Flags().IntVarP(&opts.timeout, "timeout", "t", 0, "Seconds to wait before killing the container") + cmd.Flags().StringVarP(&opts.signal, "signal", "s", "", + "Signal to send to each container's main process.\n"+ + "Can be a signal name (SIGTERM, SIGINT, SIGHUP, etc.) or a number. (default SIGTERM)") + cmd.Flags().IntVarP(&opts.timeout, "timeout", "t", 10, + "Seconds to wait for each container to stop gracefully before forcibly killing it with SIGKILL.\n"+ + "Use -1 to wait indefinitely.") return cmd } @@ -46,10 +51,8 @@ func stop(ctx context.Context, uncli *cli.CLI, opts stopOptions) error { defer client.Close() stopOpts := container.StopOptions{ - Signal: opts.signal, - } - if opts.timeoutChanged { - stopOpts.Timeout = &opts.timeout + Signal: opts.signal, + Timeout: &opts.timeout, } for _, s := range opts.services {