使用gocron实现Go程序每5分钟定时执行无输出如何解决
无法输出的原因
- 你仅完成了定时任务的注册,没有启动gocron的调度器,注册的任务不会被触发执行
- main函数在注册任务完成后会直接执行结束,整个程序进程退出,没有预留等待任务执行的运行时间
解决方案
在注册任务后调用gocron提供的StartBlocking()方法启动阻塞式调度,即可保持程序运行并按间隔执行任务,修改后的代码参考如下:
package main import ( "fmt" "github.com/go-co-op/gocron" ) func hi() { fmt.Println("hi") } func main() { _, err := gocron.Every(5).Minute().Do(hi) if err != nil { // 可按需添加任务注册失败的处理逻辑 panic(err) } // 启动阻塞调度,维持程序运行 gocron.StartBlocking() }
如果你需要在调度运行过程中加入自定义的退出控制逻辑,也可以选择非阻塞启动调度配合通道实现阻塞,示例如下:
func main() { _, err := gocron.Every(5).Minute().Do(hi) if err != nil { panic(err) } // 非阻塞启动调度 gocron.Start() // 此处通过空select永久阻塞,你也可以监听syscall信号、自定义退出通道等实现可控退出 select {} }
内容的提问来源于stack exchange,提问作者Sathya Narayanan
相关产品推荐
相关产品推荐

