add command: retry;
parent
bd1fc116ec
commit
170bdd0b45
@ -0,0 +1,3 @@
|
|||||||
|
在程序返回不为0时重试
|
||||||
|
|
||||||
|
Usage: `retry -c 10 -i 2s -- <command> <args>`
|
@ -0,0 +1,3 @@
|
|||||||
|
module main
|
||||||
|
|
||||||
|
go 1.20
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue