1
func main() {
    statusChannel := make(chan bool)
    go checkChannel(statusChannel)
    [...] 
    if x == 1 {
    statusChannel <- true
    } else {
    statusChannel <- false
}


func checkChannel(statusChannel chan bool) {
defer close(statusChannel)
for {
    log.Printf("waiting for signal...\n")
    shouldContinue := <-statusChannel
    if !shouldContinue {
        log.Print("received false, breaking...\n")
        gocron.Clear()
        break
    }
    gocron.Every(1).Minute().Do(myFunc)
    <-gocron.Start()
    log.Print("working...\n")
    }
}

The running gocron job will break, but if my gocron job starts a second time later, it runs my function two times per minute. Where is my mistake?

Jonathan Hall
  • 75,165
  • 16
  • 143
  • 189
  • Possible duplicate of [how to stop a goroutine](http://stackoverflow.com/questions/6807590/how-to-stop-a-goroutine) – Jonathan Hall Mar 08 '17 at 10:30
  • No, not really. My problem is that my goroutine stops, but when i start the gocron job later, the goroutine runs two times per minute. –  Mar 08 '17 at 12:46

1 Answers1

0

I just had a simmilar Issue with gocron and I fixed my problem by removing

<-gocron.Start()

from my for-loop as it will start gocron jobs that were already started again.

you might try changing your for loop to this:

for {
    log.Printf("waiting for signal...\n")
    shouldContinue := <-statusChannel
    if !shouldContinue {
        log.Print("received false, breaking...\n")
        gocron.Clear()
        break
    }
    gocron.Every(1).Minute().Do(myFunc)
    log.Print("working...\n")
    }
    <-gocron.Start()
}

if that doesn't fix your problem you can also have a look at my post, maybe it helps you :)

gocron creates multiple instances of task

Hendrik Evert
  • 340
  • 2
  • 19