package main import ( "bufio" "flag" "fmt" "io/ioutil" "log" "os" "strings" "time" "github.com/influxdata/cron" ) func init() { verbose := flag.Bool("v", false, "display log output") flag.Parse() if *verbose { } else { log.SetOutput(ioutil.Discard) log.SetFlags(0) } } func main() { // seed with a large number that rtcwake can still handle m := 268435455 d := make(chan struct{}) s := bufio.NewScanner(os.Stdin) go func() { n := time.Now() for s.Scan() { //we need to only get the first 5 fields otherwise //the cron library will try to parse the rest too fields := strings.Split(strings.TrimSpace(s.Text()), " ") l := strings.Join(fields[:5], " ") p, e := cron.ParseUTC(l) if e == nil { t, e := p.Next(n) if e != nil { log.Fatal(e) } i := int(t.Sub(n).Seconds()) if i < m { m = i } log.Print(i) } else { log.Print(e) } } d <- struct{}{} }() <-d fmt.Println(m) }