mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 16:00:25 +08:00 
			
		
		
		
	
		
			
	
	
		
			47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
							 | 
						||
| 
								 | 
							
								//go:build !arm64
							 | 
						||
| 
								 | 
							
								// +build !arm64
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								package nodes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"bytes"
							 | 
						||
| 
								 | 
							
									"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
							 | 
						||
| 
								 | 
							
									"github.com/iwind/TeaGo/Tea"
							 | 
						||
| 
								 | 
							
									"github.com/iwind/TeaGo/logs"
							 | 
						||
| 
								 | 
							
									"io/ioutil"
							 | 
						||
| 
								 | 
							
									"os"
							 | 
						||
| 
								 | 
							
									"syscall"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// 处理异常
							 | 
						||
| 
								 | 
							
								func (this *Node) handlePanic() {
							 | 
						||
| 
								 | 
							
									// 如果是在前台运行就直接返回
							 | 
						||
| 
								 | 
							
									backgroundEnv, _ := os.LookupEnv("EdgeBackground")
							 | 
						||
| 
								 | 
							
									if backgroundEnv != "on" {
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									var panicFile = Tea.Root + "/logs/panic.log"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// 分析panic
							 | 
						||
| 
								 | 
							
									data, err := ioutil.ReadFile(panicFile)
							 | 
						||
| 
								 | 
							
									if err == nil {
							 | 
						||
| 
								 | 
							
										var index = bytes.Index(data, []byte("panic:"))
							 | 
						||
| 
								 | 
							
										if index >= 0 {
							 | 
						||
| 
								 | 
							
											remotelogs.Error("NODE", "系统错误,请上报给开发者: "+string(data[index:]))
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									fp, err := os.OpenFile(panicFile, os.O_CREATE|os.O_TRUNC|os.O_WRONLY|os.O_APPEND, 0777)
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										logs.Println("NODE", "open 'panic.log' failed: "+err.Error())
							 | 
						||
| 
								 | 
							
										return
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									err = syscall.Dup2(int(fp.Fd()), int(os.Stderr.Fd()))
							 | 
						||
| 
								 | 
							
									if err != nil {
							 | 
						||
| 
								 | 
							
										logs.Println("NODE", "write to 'panic.log' failed: "+err.Error())
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |