coreos/go-systemd
GitHub: coreos/go-systemd
systemd 的 Go 语言绑定库,涵盖 D-Bus 服务管理、socket 激活、journald 日志读写、单元文件处理及 logind/machined 集成等功能。
Stars: 2692 | Forks: 333
# go-systemd
[](https://pkg.go.dev/mod/github.com/coreos/go-systemd/v22/?tab=packages)

systemd 的 Go 绑定。该项目包含以下几个包:
- `activation` - 用于在 Go 中编写和使用 socket 激活
- `daemon` - 用于向 systemd 通知服务状态变更
- `dbus` - 用于启动/停止/检查正在运行的服务和单元
- `journal` - 用于写入 systemd 的日志服务 journald
- `sdjournal` - 通过封装 journald 的 C API 来从中读取日志
- `login1` - 用于与 systemd logind API 集成
- `machine1` - 用于向 systemd 注册机器/容器
- `unit` - 用于单元文件的序列化/反序列化和比较
## Socket 激活
在运行 systemd 的 Linux 机器上,按照本 README 的步骤,可以快速设置一个使用 socket 激活的 HTTP 服务器示例:
https://github.com/coreos/go-systemd/tree/main/examples/activation/httpserver
## systemd 服务通知
`daemon` 包是 [sd_notify 协议](https://www.freedesktop.org/software/systemd/man/sd_notify.html#Description)的一个实现。
它可用于向 systemd 通知服务启动完成、watchdog 事件以及其他状态变更。
## D-Bus
`dbus` 包连接到 [systemd D-Bus API](http://www.freedesktop.org/wiki/Software/systemd/dbus/),让你能够启动、停止和内省 systemd 单元。
[API 文档][dbus-doc] 可在线查看。
### 调试
创建一个如下所示的 `/etc/dbus-1/system-local.conf` 文件:
```
```
## Journal
### 写入 Journal
使用纯 Go 实现的 `journal` 包,你可以将日志条目直接提交到 systemd 的 journal 中,并利用诸如为每个日志条目建立索引的键/值对等功能。
### 从 Journal 读取
`sdjournal` 包通过封装 journald 原生的 C API 来提供对 journal 的读取访问;因此,它需要 cgo 并且要求系统上有可用的 journal 头文件。
## logind
`login1` 包提供了与 [systemd logind API](http://www.freedesktop.org/wiki/Software/systemd/logind/) 集成的相关函数。
## machined
`machine1` 包允许与 [systemd machined D-Bus API](http://www.freedesktop.org/wiki/Software/systemd/machined/) 进行交互。
## 单元
`unit` 包提供了各种用于处理 [systemd 单元文件](http://www.freedesktop.org/software/systemd/man/systemd.unit.html)的函数。
标签:D-Bus, EVTX分析, Go, Ruby工具, systemd, 抓包工具, 日志, 日志审计, 服务管理, 系统编程