diff --git a/scratchpad/repeat/main.go b/scratchpad/repeat/main.go new file mode 100644 index 0000000..7fe769c --- /dev/null +++ b/scratchpad/repeat/main.go @@ -0,0 +1,46 @@ +package main + +import ( + "log" + "os" + "os/exec" + "time" +) + +var config struct { + duration time.Duration +} + +func usage() { + log.Printf("usage: repeat repeatInterval command [args...]") +} + +func main() { + + args := os.Args + + if len(args) < 3 { + usage() + os.Exit(1) + } + repeatInterval, err := time.ParseDuration(args[1]) + if err != nil { + log.Printf("cannot parse interval: %s", err) + usage() + os.Exit(1) + } + + var lastStart time.Time + + for { + cmd := exec.Command(args[2], args[3:]...) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + lastStart = time.Now() + if err := cmd.Run(); err != nil { + panic(err) + } + time.Sleep(lastStart.Add(repeatInterval).Sub(time.Now())) + } + +} diff --git a/scratchpad/repeat/sleepx.sh b/scratchpad/repeat/sleepx.sh new file mode 100755 index 0000000..e6856dc --- /dev/null +++ b/scratchpad/repeat/sleepx.sh @@ -0,0 +1,6 @@ +#!/bin/sh +echo -n ' start ' +date +sleep $1 +echo -n 'done ' +date