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