返回博客

保持 Go 程序持续运行

本文介绍如何使 Go 程序持续运行,讲解了使用 `signal` 包捕获中断信号以及使用 `select {}` 语句阻塞程序的方法,并介绍了如何使用 `cron` 包实现定时任务。文章包含代码示例,并提供了更深入学习的链接。

Mt.r
|

期望 go 的程序一直运行不中断

package main

import (
    "fmt"
    "os"
    "os/signal"
    "time"

    "github.com/robfig/cron"
)

func main() {
    c := cron.New()
    c.AddFunc("* * * * * *", RunEverySecond)
    go c.Start()
    sig := make(chan os.Signal)
    signal.Notify(sig, os.Interrupt, os.Kill)
    <-sig

}

func RunEverySecond() {
    fmt.Printf("%v\n", time.Now())
}

关键部分在这一块代码,还没吃透。

sig := make(chan os.Signal)
signal.Notify(sig, os.Interrupt, os.Kill)
<-sig

另外一个方法 select

package main

import (
    "fmt"
    "time"
)

func main() {
    go forever()
    select {} // block forever
}

func forever() {
    for {
        fmt.Printf("%v+\n", time.Now())
        time.Sleep(time.Second)
    }
}

更多方法见 how-best-do-i-keep-a-long-running-go-program-running