mirror of
https://github.com/zrepl/zrepl.git
synced 2024-12-22 23:20:51 +01:00
scratchpad: repeat: run a command in a certain interval or as soon as it finishes
This commit is contained in:
parent
2c13fbe6ec
commit
8e378d76b9
46
scratchpad/repeat/main.go
Normal file
46
scratchpad/repeat/main.go
Normal file
@ -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()))
|
||||
}
|
||||
|
||||
}
|
6
scratchpad/repeat/sleepx.sh
Executable file
6
scratchpad/repeat/sleepx.sh
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
echo -n ' start '
|
||||
date
|
||||
sleep $1
|
||||
echo -n 'done '
|
||||
date
|
Loading…
Reference in New Issue
Block a user