我想编写一个 golang 程序,在 kubernetes 的容器中作为服务运行。该程序应该一直运行而不是自行终止——除非出现错误。如果 SIGTERM 来自 kubelet / kubernetes 因为 pod 应该被删除,程序应该退出。
在我的第一种方法中,我实现了一个应该每分钟运行一次的 for 循环。在这个循环中,程序从另一个服务中查询资源并对其进行处理。然后服务应该“休眠”一分钟,然后再次执行这些步骤。在“睡眠”阶段,如果有 SIGTERM,程序应该立即响应。
func main() {
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
//restart loop every minute
ticker := time.NewTicker(60 * time.Second)
defer ticker.Stop()
// while true loop
for {
select {
case <-c:
fmt.Println("Break the loop")
return
case <-ticker.C:
fmt.Println("Hello in a loop")
}
}
}
我目前的方法有两个问题。首先,我第一次运行 for 循环时必须等待一分钟。我可以以某种方式配置它,以便计时器仅在第一次运行后运行吗?
第二个问题是程序不应该在运行之间做任何事情——除了对 SIGTERM 做出反应。
我不确定我解决问题的方法是否正确。我刚刚开始使用 GO 语言。也许有更好的方法来解决我的问题。
桃花长相依
相关分类