From 170bdd0b45848b73a499de852f92404d670f938c Mon Sep 17 00:00:00 2001 From: Ge Song Date: Tue, 28 Mar 2023 14:18:36 +0800 Subject: [PATCH] add command: retry; --- cmd/retry/README.md | 3 +++ cmd/retry/go.mod | 3 +++ cmd/retry/go.sum | 0 cmd/retry/main.go | 48 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+) create mode 100644 cmd/retry/README.md create mode 100644 cmd/retry/go.mod create mode 100644 cmd/retry/go.sum create mode 100644 cmd/retry/main.go diff --git a/cmd/retry/README.md b/cmd/retry/README.md new file mode 100644 index 0000000..e362672 --- /dev/null +++ b/cmd/retry/README.md @@ -0,0 +1,3 @@ +在程序返回不为0时重试 + +Usage: `retry -c 10 -i 2s -- ` diff --git a/cmd/retry/go.mod b/cmd/retry/go.mod new file mode 100644 index 0000000..1e03b32 --- /dev/null +++ b/cmd/retry/go.mod @@ -0,0 +1,3 @@ +module main + +go 1.20 diff --git a/cmd/retry/go.sum b/cmd/retry/go.sum new file mode 100644 index 0000000..e69de29 diff --git a/cmd/retry/main.go b/cmd/retry/main.go new file mode 100644 index 0000000..474392e --- /dev/null +++ b/cmd/retry/main.go @@ -0,0 +1,48 @@ +package main + +import ( + "flag" + "fmt" + "os" + "os/exec" + "time" +) + +var ( + count int + interval time.Duration +) + +func main() { + flag.IntVar(&count, "c", 5, "maximum execution times") + flag.DurationVar(&interval, "i", time.Second, "retry interval") + flag.Parse() + if count < 1 { + count = 1 + } + if interval < 0 { + interval = 0 + } + args := flag.Args() + if len(args) == 0 { + fmt.Println("Please give the command to execute!") + os.Exit(1) + } + var err error + for i := 0; i < count; i++ { + if i > 0 { + fmt.Printf("retry %d after %s...\n", i, interval) + time.Sleep(interval) + } + cmd := exec.Command(args[0], args[1:]...) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + err = cmd.Run() + if err == nil { + break + } + } + if err != nil { + os.Exit(1) + } +}