3 个不稳定版本
0.2.0 | 2019 年 10 月 16 日 |
---|---|
0.1.1 | 2019 年 9 月 4 日 |
0.1.0 | 2019 年 9 月 2 日 |
#1533 在 命令行工具
275KB
6.5K SLoC
killjoy
监控系统启动单元。
killjoy 是一个 systemd 单元监控应用程序。它发现 systemd 单元并跟踪它们的状态。当一个单元改变到感兴趣的状态时,killjoy 会联系通知器。通知器的例子包括
概念
要理解 killjoy,首先必须理解 systemd
systemd 是一套 Linux 系统的基本构建块。它提供了一个作为 PID 1 运行的系统和服务管理器,并启动系统的其余部分。
— systemd
单元是 systemd 知道如何管理的资源。例如,以下是一些可能存在于主机上的单元及其代表的资源:
nginx.service
:轻量级 HTTP 服务器和 IMAP/POP3 代理服务器logrotate.service
:旋转日志文件logrotate.timer
:每天旋转日志文件(即定期触发logrotate.service
)boot.mount
:/boot 挂载点
这个单元列表很小;一个主机可以有数百个单元,分为十一种不同类型。
在给定时间,主机上可以运行多个 systemd 实例。通常,有一个系统级别的实例和一个针对每个登录用户的实例。每个 systemd 实例维护不同的单元。
当 killjoy 启动时,它会读取一个规则列表,其中每个规则声明了 killjoy 应该监视的单元。例如,规则可能会声明
- 连接到系统总线并监视
nginx.service
。如果它进入“失败”状态,联系“日志文件”通知器。 - 连接到会话总线并监视所有
.timer
单元。如果任何单元进入“活动”状态,联系“通知”通知器。
通知器是知道如何从 killjoy 消费 D-Bus 消息的应用程序。killjoy 和通知器之间的明确分离意味着任何人都可以随时编写通知器,使用他们想要的任何语言,做他们想做的任何事情,而不需要与 killjoy 开发团队合作。与 killjoy 一起开发了两个通知器,它们足够小,可以轻松研究
有关更详细的概念信息,请参阅 systemd(1),特别是关于 概念 的部分。
替代方案
killjoy 受到 sagbescheid、SystemdMon、pynagsystemd 和 OnFailure=
的启发,但在功能、可靠性和效率方面存在差异。特别值得注意的是
- killjoy 允许用户编写通用规则,如 "监视所有
.timer
单元。" 这与用户必须明确声明每个要监视的单元的情况形成对比。此外,单元可能在运行时出现或消失,例如在安装或卸载软件包时,killjoy 正确处理这些事件。 - killjoy 与通知器完全分离。用户不限于 killjoy 随附的通知器。
安装
Arch Linux 用户可以使用 killjoy-git AUR 软件包进行安装。当 killjoy 进一步成熟时,将创建一个稳定的软件包。
Rust 开发者可以使用 cargo install killjoy
命令安装此应用程序。请注意,必须安装 libdbus。在 Ubuntu 上,这由 libdbus-1-dev
软件包提供。
配置
killjoy 会根据 XDG Base Directory Specification 在 killjoy/settings.json
处查找配置文件,并使用找到的第一个。实际上,这意味着配置文件通常应安装在 ~/.config/killjoy/settings.json
。
以下是一个示例配置文件
{
"version": 1,
"rules": [
{
"bus_type": "session",
"active_states": ["activating", "active", "deactivating", "inactive", "failed"],
"expression": "foo.service",
"expression_type": "unit name",
"notifiers": ["logfile", "notification"]
}
],
"notifiers": {
"logfile": {
"bus_type": "session",
"bus_name": "name.jerebear.KilljoyNotifierLogfile1"
},
"notification": {
"bus_type": "session",
"bus_name": "name.jerebear.KilljoyNotifierNotification1"
}
}
}
可以使用 killjoy settings validate
验证设置文件的格式。
配置文件的意义如下
version
定义如何解释配置文件的其余部分。目前有一个配置文件格式,此键始终应设置为 1。rules
是一条规则列表,说明应监视哪些单元。对于每个规则bus_type
定义 killjoy 应连接到哪个 D-Bus 总线以查找 systemd 实例。它可以是session
或system
。- 上面列出了所有可能的
active_states
;有关详细信息,请参阅 systemd(1)。 expression_type
和expression
定义应监视哪些单元(在 killjoy 与 systemd 通信时发现的全部单元中)。如果expression_type
是unit name
,则expression
应为一个确切的单元名称,如foo.service
。unit type
,则expression
应为一个单元后缀,如.service
。regex
,则expression
应为一个正则表达式,如^f[aeiou]{2}\.service$
。注意行首和行尾锚点的存在,^
和$
。
notifiers
是一个通知标签列表。
notifiers
是一个映射,其中键是通知标签,值定义了如何联系该通知者。bus_type
定义了当向此通知者发送消息时,killjoy 应连接到哪个消息总线。bus_name
定义了通知者在消息总线上的总线名称(即地址)。
用法
通常使用 killjoy 的方式是在登录时自动启动它。
systemctl --user enable --now killjoy.service
killjoy 也可以手动调用。执行 killjoy
以在前台运行 killjoy,或 killjoy --help
了解其功能。
变更日志
请参阅注释的 git 标签。
许可
killjoy 根据 GPLv3 或任何后续版本许可。
依赖项
约 10MB
约 207K SLoC