Ver Fonte

fix:调整定时任务panic报错时的监听bug,beego不支持监听协程中的panic,只支持http请求的panic

Roc há 1 ano atrás
pai
commit
faa2d2b6cb
2 ficheiros alterados com 24 adições e 1 exclusões
  1. 1 1
      main.go
  2. 23 0
      services/task.go

+ 1 - 1
main.go

@@ -19,7 +19,7 @@ func main() {
 		web.BConfig.WebConfig.DirectoryIndex = true
 		web.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
 	}
-	go services.Task()
+	go services.InitTask()
 	//services.TaskTest()
 	web.BConfig.RecoverFunc = Recover
 	web.Run()

+ 23 - 0
services/task.go

@@ -6,6 +6,7 @@ import (
 	"fmt"
 	"github.com/beego/beego/v2/task"
 	"hongze/hongze_task/models"
+	"hongze/hongze_task/services/alarm_msg"
 	"hongze/hongze_task/services/company"
 	"hongze/hongze_task/services/company_contract"
 	"hongze/hongze_task/services/data"
@@ -13,12 +14,34 @@ import (
 	"hongze/hongze_task/services/maycur"
 	"hongze/hongze_task/services/roadshow"
 	"hongze/hongze_task/utils"
+	"runtime"
 	"strconv"
 	"strings"
 	"sync"
 	"time"
 )
 
+func InitTask() {
+	defer func() {
+		if err := recover(); err != nil {
+			fmt.Println("进来了定时任务的异常处理")
+			stack := fmt.Sprintf("Handler crashed with error: %v", err) + "\n</br>"
+			for i := 1; ; i++ {
+				_, file, line, ok := runtime.Caller(i)
+				if !ok {
+					break
+				}
+				stack += fmt.Sprintln(fmt.Sprintf("%s:%d</br>", file, line))
+			}
+			//fmt.Println(stack)
+			go alarm_msg.SendAlarmMsg(utils.APPNAME+"崩了"+time.Now().Format("2006-01-02 15:04:05")+"\n"+stack, 3)
+		}
+	}()
+
+	// 实际开始定时任务
+	Task()
+}
+
 func Task() {
 	fmt.Println("task start")
 	//如果是生产环境,才需要走这些任务