2016-11-01 3 views
2

läuft Ich habe eine Funktion wie folgt aus:eine Funktion regelmäßig in go

func run (cmd string) [] byte { 
    out,err = exec.Command(cmd).Output() 
    if error!=nil { 
     log.Fatal (err) 
    } 
    return out 
} 

Ich möchte diesen Befehl auf diese Weise laufen

run ("uptime") // run every 5 secs 
run ("date") // run every 10 secs 

Ich mag würde diese Befehle ausführen und seine Ausgabe sammeln und mach etwas damit. Wie würde ich das machen?

+0

'time.Ticker' sendet Benachrichtigungen in regelmäßigen Abständen (auf einem Kanal). Sie könnten eine Goroutine für jeden dieser Aufrufe haben, die einen Ticker verwenden, um den Befehl im gewünschten Intervall auszuführen. –

+0

Nicht sicher, warum ich eine negative Stimme bekommen habe, ist das eine so offensichtliche Frage? – NinjaGaiden

+0

Sie könnten auch am Cron-Paket interessiert sein: https://github.com/robfig/cron – user114241

Antwort

7

Verwenden Sie eine time.Ticker. Es gibt viele Möglichkeiten, um das Programm zu strukturieren, aber Sie können mit einem einfachen for-Schleife starten:

uptimeTicker := time.NewTicker(5 * time.Second) 
dateTicker := time.NewTicker(10 * time.Second) 

for { 
    select { 
    case <-uptimeTicker.C: 
     run("uptime") 
    case <-dateTicker.C: 
     run("date") 
    } 
} 

Sie dann mögen die Befehle in einem goroutine laufen, wenn es eine Chance, dass sie länger als Ihr kürzester Abstand nehmen könnten zu vermeiden ein Rückstand in der for-Schleife. Alternativ könnte jede Goroutine ihre eigene for-Schleife mit einem einzelnen Ticker haben.