3 个不稳定版本

0.2.0 2019 年 10 月 16 日
0.1.1 2019 年 9 月 4 日
0.1.0 2019 年 9 月 2 日

#1533命令行工具

GPL-3.0-or-later

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 受到 sagbescheidSystemdMonpynagsystemdOnFailure= 的启发,但在功能、可靠性和效率方面存在差异。特别值得注意的是

  • killjoy 允许用户编写通用规则,如 "监视所有 .timer 单元。" 这与用户必须明确声明每个要监视的单元的情况形成对比。此外,单元可能在运行时出现或消失,例如在安装或卸载软件包时,killjoy 正确处理这些事件。
  • killjoy 与通知器完全分离。用户不限于 killjoy 随附的通知器。

安装

Arch Linux 用户可以使用 killjoy-git AUR 软件包进行安装。当 killjoy 进一步成熟时,将创建一个稳定的软件包。

Rust 开发者可以使用 cargo install killjoy 命令安装此应用程序。请注意,必须安装 libdbus。在 Ubuntu 上,这由 libdbus-1-dev 软件包提供。

配置

killjoy 会根据 XDG Base Directory Specificationkilljoy/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 实例。它可以是 sessionsystem
    • 上面列出了所有可能的 active_states;有关详细信息,请参阅 systemd(1)
    • expression_typeexpression 定义应监视哪些单元(在 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