初级会员
  • 第 25232 位会员
  • ccoding
  • 叶伽
  • 2018-11-11 00:36:44
  • Offline
  • 20 0

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 问题已解决,感谢楼上的各位的热心帮助,下面是我得解决方法,确定问题就在于systemd,当启动的时候 虽然日志成功,但是systemd并未收到信号量running,这个时候会启动一个一小时启动一次的方式,这个感兴趣的可以详细的了解 ```golang //导入一个包 go get github.com/coreos/go-systemd/daemon //看门狗,不用纠结logger,这个换成自己的日志输出或者,fmt打印都可以,每隔5秒告诉一次systemd健康状态,这个要使用 go 单独启动一个协成来执行 func main(){ //TDDO启动TCP服务监听 //启动看门狗 go goWatchSignal() for { conn, e := ln.Accept() if e != nil { if ne, ok := e.(net.Error); ok && ne.Temporary() { logrus.Error("接受到错误信息") continue } } go goHandlerConn(conn) } } func goWatchSignal() { //发送运行信号通知 _, err := daemon.SdNotify(false, daemon.SdNotifyReady) if err != nil { logger.Init("WatchSignal").Warn("SdNotifyReady-发送运行信号失败", zap.Reflect("err", err.Error())) } for { _, er := daemon.SdNotify(false, daemon.SdNotifyWatchdog) if er != nil { logger.Init("WatchSignal").Warn("SdNotifyWatchdog-发送指令异常", zap.Reflect("err", err.Error())) } time.Sleep(5 * time.Second) } } ```
  • 果然,上面的代码也重启了。。。。 ```golang {"CPU":4,"level":"info","msg":"POSP","time":"2023-03-08 12:12:13","tips":"服务器启动连接监听"} {"CPU":4,"level":"info","msg":"POSP","time":"2023-03-08 13:12:23","tips":"服务器启动连接监听"} ```
  • 我现在只能用最原始,最无脑的办法 就是排除法懵,已经单独启动了一个应用,代码很干净,为了排除日志扩展可能得问题,我临时换了一个扩展,就等结果了,如果一个小时候还会重启,那我就崩塌了,我只能怀疑是systemd有问题,就换个别的守护试试 ```golang package main import ( "fmt" "github.com/sirupsen/logrus" "io" "net" "os" "runtime" ) func main() { var log = logrus.New() log.SetFormatter(&logrus.JSONFormatter{ TimestampFormat: "2006-01-02 15:04:05", }) log.SetOutput(os.Stdout) file, err := os.OpenFile("logruss.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) writers := []io.Writer{ file, os.Stdout} //同时写文件和屏幕 fileAndStdoutWriter := io.MultiWriter(writers...) if err == nil { log.SetOutput(fileAndStdoutWriter) } else { log.Info("Failed to log to file") } log.WithFields(logrus.Fields{"tips": "服务器启动连接监听", "CPU": runtime.NumCPU()}).Info("POSP") ln, err := net.Listen("tcp", "127.0.0.1:8888") if err != nil { logrus.Error("服务异常", logrus.Fields{"err": err.Error()}) } for { conn, e := ln.Accept() if e != nil { if ne, ok := e.(net.Error); ok && ne.Temporary() { logrus.Error("接受到错误信息") continue } } go goHandlerConn(conn) } } func goHandlerConn(conn net.Conn) { defer func() { if conn != nil { conn.Close() } if err := recover(); err != nil { logrus.Error("发现异常-1") } return }() fmt.Println("我是执行的么") } ```
  • #13 @xwszt goHandleConn伪代码 已经加上了,没有recover到任何信息 ```golang defer func() { if conn != nil { conn.Close() } if err := recover(); err != nil { //获取程序名称 appExeName := os.Args[0] pid := os.Getegid() logger.Init("POSP中台").Error("goHandleConn:引发panic异常", zap.Reflect("error", err), zap.Reflect("app", appExeName), zap.Reflect("pid", pid), zap.Reflect("strack", string(debug.Stack())), zap.Reflect("LogId", logId), ) notice.NoticeMsg("goHandleConn:引发panic异常", fmt.Sprintf("LogId:%s %v:app:%v:pid:%v:strack:", logId, err, appExeName, pid, string(debug.Stack()))) } return }() ```
  • 刚又出现了,伴随着的大概率就会出现CPU 爆满,刚想用pprof查线下,结果连pprof都异常了,干瞪眼儿了。。。。