go程序报错Unix syslog delivery error

简介: 记录一下问题出错原因



为什么截一张这样的代码图片,是因为程序报错Unix syslog delivery error

起初报这个错误,我也是一脸懵逼,通过Google搜索,找到这段代码

代码意思是:通过网络连接,只要连接成功,就返回

遍历连接方式unixgram,unix

遍历连接目标 /dev/log/var/run/syslog/var/run/log

所有的遍历都尝试后,不成功的,返回错误信息

那么什么是unixgram  unix, unixpacket又是什么呢

socket套接字

基于网络:AF_INET

基于文件:  AF_UNIX

Unix套接字,作用于本地进程之间的通信(Unix domain socket) uds 进程之间通信,不需要网络协议栈,

服务端代码例子 s.go

packagemainimport (
"fmt""net""os")
funcmain() {
os.Remove("/tmp/ee")
addr :=&net.UnixAddr{Name: "/tmp/ee", Net: "unix"}
unixlisten, err :=net.ListenUnix("unix", addr)
iferr!=nil {
panic(err)
 }
deferunixlisten.Close()
for {
unixconn, err :=unixlisten.AcceptUnix()
iferr!=nil {
continue    }
gounixWork(unixconn)
 }
}
funcunixWork(conn*net.UnixConn) {
ipstr :=conn.RemoteAddr()
deferconn.Close()
fmt.Println(ipstr)
varbuf [1024]byten, err :=conn.Read(buf[:])
iferr!=nil {
panic(err)
 }
fmt.Printf("%s\n", string(buf[:n]))
conn.Write([]byte("hello,world"))
}


运行后,会产生一个socket类型文件,客户端进程与服务端进程将通过这个文件进行数据交互


客户端代码 c.go

packagemainimport (
"fmt""net")
funcmain() {
unixaddr :=&net.UnixAddr{Net: "unix", Name: "/tmp/ee"}
conn, err :=net.DialUnix("unix", nil, unixaddr)
iferr!=nil {
panic(err)
 }
deferconn.Close()
conn.Write([]byte("hello,s"))
varb [1024]byten, err :=conn.Read(b[:])
iferr!=nil {
fmt.Println(err)
 }
fmt.Println(string(b[:n]))
}

通过lsof 可以查看到/tmp/ee 被那个进程使用


这下我们大概了解了啥情况,通信使用的,不过没有进入网络层

再来看看三者是啥区别

unixSOCK_STREAM  tcp

unixgramSOCK_DGRAM  udp

unixpacketSOCK_SEQPACKET 这个还没搞清楚


再回到开始的话题,当你看到这个错误syslog delivery error

你可能就秒懂,是因为通过基于文件的套接字连接不上

/dev/log/var/run/syslog/var/run/log  这几个文件没有对应的程序去监听它们

我开始也不知道是那些程序会监听这几个文件,不过大概猜测是与日志有关

Linux的日志服务,有syslog,rsyslog,journalctl,索性重启电脑,再通过lsof查看下


如果我把这个服务停止掉,go应用程序某个功能就会出错,报syslog delivery error

目录
相关文章
|
20天前
|
存储 Go C语言
如何用Go开发eBPF程序
【2月更文挑战第7天】
|
20天前
|
安全 Go
Go语言并发:释放程序潜能的魔力
Go语言并发:释放程序潜能的魔力
29 0
|
8月前
|
Java 编译器 Go
Go 语言 入门 && 基于 GoLand 2023.1 创建第一个Go程序
Go 语言 入门 && 基于 GoLand 2023.1 创建第一个Go程序
69 0
|
7天前
|
Java 测试技术 Go
使用go的内置运行时库调试和优化程序
【5月更文挑战第18天】在本文中,作者探讨了如何为运行时程序添加剖析支持以优化性能。他们面临的问题是一个程序需要找出平方根为整数且逆序平方等于其逆序的数字。他们首先展示了原始代码,然后使用`runtime`库进行优化,将计算和调用功能分离,同时记录CPU和内存使用情况。
22 4
|
11天前
|
Go
第一个 Go 程序
第一个 Go 程序
19 2
|
20天前
|
存储 Java Linux
聊聊Go程序是如何运行的
本文作者 **sharkChili** 是一名 Java 和 Go 语言开发者,同时也是 CSDN 博客专家和 JavaGuide 维护者。文章探讨了 Go 语言的执行过程,从汇编角度出发,解释了如何从 `main.go` 文件开始,经过入口跳转、参数拷贝、启动协程、运行 `g0` 的 `main` 方法等步骤,最终执行到用户定义的 `main` 函数。文章还展示了相关汇编代码片段,并提供了运行时检查、系统初始化和调度器初始化的细节。结尾提到,有兴趣的读者可以加入作者创建的交流群进行深入讨论。
16 0
|
20天前
|
运维 Serverless Go
Serverless 应用引擎产品使用之在阿里云函数计算中,Go语言的函数计算服务Go程序没有正确打包如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
20天前
|
Unix Linux Go
Golang深入浅出之-信号(Signals)处理与优雅退出Go程序
【4月更文挑战第25天】Go语言中的信号处理关乎程序对外部事件的响应,尤其是优雅地终止进程。本文介绍了信号基础,如SIGINT、SIGTERM等常见信号,以及处理流程:注册处理器、等待信号、执行清理和优雅退出。强调了三个易错点及避免方法,并提供实战代码示例展示如何监听和响应信号。信号处理应简洁高效,确保程序健壮性和用户体验。
26 0
|
20天前
|
Go
Golang深入浅出之-信号(Signals)处理与优雅退出Go程序
【4月更文挑战第23天】在Go语言中,使用`os/signal`包处理信号对实现程序优雅退出和响应中断至关重要。本文介绍了如何注册信号处理器、处理常见问题和错误,以及提供代码示例。常见问题包括未捕获关键信号、信号处理不当导致程序崩溃和忽略清理逻辑。解决方案包括注册信号处理器(如`SIGINT`、`SIGTERM`)、保持信号处理器简洁和执行清理逻辑。理解并正确应用这些原则能增强Go程序的健壮性和可管理性。
30 1
|
7月前
|
机器学习/深度学习 NoSQL Go
如何进行Go程序的打包发布
如何进行Go程序的打包发布
117 7