我有这样的功能:
func run (cmd string) [] byte {
out,err = exec.Command(cmd).Output()
if error!=nil {
log.Fatal (err)
}
return out
}
我想以这种方式运行此命令
run ("uptime") // run every 5 secs
run ("date") // run every 10 secs
我想运行这些命令并收集其输出并使用它做一些事情。我怎么会这样做?
答案 0 :(得分:11)
使用time.Ticker
。有很多方法可以构建程序,但是你可以从一个简单的for循环开始:
uptimeTicker := time.NewTicker(5 * time.Second)
dateTicker := time.NewTicker(10 * time.Second)
for {
select {
case <-uptimeTicker.C:
run("uptime")
case <-dateTicker.C:
run("date")
}
}
如果可能需要比最短间隔更长的时间来避免for循环中的积压,那么您可能希望在goroutine中运行命令。或者,每个goroutine都可以使用单个Ticker进行自己的for循环。
答案 1 :(得分:2)
func main() {
for range time.Tick(time.Second * 10) {
function_name()
}
}
答案 2 :(得分:0)
我建议检查这个包。 https://godoc.org/github.com/robfig/cron
您甚至可以使用秒。
c := cron.New(cron.WithSeconds())
c.AddFunc("*/5 * * * * *", func() { fmt.Println("Testing every 5 seconds.") })
c.Start()