#utility #命令行工具 #命令行 #服务配置 #cli

app sysstatus

一个小巧快速的工具,可以获取系统概览,包括负载、存储使用情况、温度和服务

6 个版本

0.2.1 2022年6月28日
0.2.0 2021年8月15日
0.1.3 2021年8月9日
0.1.1 2021年7月16日

#1529命令行工具

自定义许可协议

38KB
730

sysstatus

一个小巧快速的工具,可以获取系统概览,包括负载、存储使用情况、温度和服务。

Example Output of sysstatus

安装

源代码

  • 克隆仓库 git clone [email protected]:scratchcat1/sysstatus.git
  • 进入仓库 cd sysstatus
  • 使用 cargo build 构建
  • 使用 cargo runcargo run --release
  • (可选) 使用不同的配置文件,使用 cargo run -- -c /path/to/config.json

选项

sysstatus 0.1.1

USAGE:
    sysstatus [FLAGS] [OPTIONS]

FLAGS:
        --default-config    Create a default config file and then exit
    -h, --help              Prints help information
    -V, --version           Prints version information

OPTIONS:
    -c, --config-file-path <config-file-path>
            Path to configuration file. Default is $HOME/.config/sysstatus/config.json

配置

sysstatus 需要一个配置文件来运行,默认情况下会查找 $HOME/.config/sysstatus/config.json。要手动指定配置文件,请使用 sysstatus --config /path/to/config.json

可以使用 sysstatus --default-config 生成默认配置。

颜色

颜色必须使用反序列化为 colored::Color 的值,请参阅此处的枚举。有效的示例包括 "Black""BrightCyan"{ "TrueColor": { "r": 3, "g": 4, "b": 255 } }

条件颜色

ConditionalColour 允许根据属性值动态选择文本颜色。每个 ConditionalColour 都有一个默认颜色和零个或多个 ColourLevel,其定义如下

{
    "default_colour": "Green",
    "levels": [
        {
            "min": 0.5,
            "colour": "Yellow"
        },
        {
            "min": 0.8,
            "colour": "Red"
        }
    ]
}

ConditionalColour 通过选择列表中颜色值大于或等于 min 的最远颜色来评估。每个级别的 min 必须随着列表的遍历而增加,否则行为是未定义的。

在以下示例中

  • 0.1 => 绿色
  • 0.49 => 绿色
  • 0.5 => 黄色
  • 0.7 => 黄色
  • 0.8 => 红色
  • 10.0 => 红色

示例配置(带说明)

{
    // [Optional] Configuration for general overview
    "general_info": {
        // ConditionalColour for load average. Comparison value = load / cores.
        "load_avg": {
            "default_colour": "Green",
            "levels": [
                {
                    "min": 0.5,
                    "colour": "Yellow"
                },
                {
                    "min": 0.8,
                    "colour": "Red"
                }
            ]
        },
        // Conditional Colour for memory usage. Comparison value = used / total.
        "memory": {
            "default_colour": "Green",
            "levels": [
                {
                    "min": 0.7,
                    "colour": "Yellow"
                },
                {
                    "min": 0.9,
                    "colour": "Red"
                }
            ]
        },
        // ConditionalColour for CPU frequency. Comparison value = CPU frequency in MHz.
        "cpu_frequency": {
            "default_colour": "Green",
            "levels": [
                {
                    "min": 2000,
                    "colour": "Yellow"
                },
                {
                    "min": 2400,
                    "colour": "Red"
                }
            ]
        }
    },
    // [Optional] Configuration for the storage bars
    "storage": {
        // ConditionalColour for colouring the usage bars of storage usage. Comparison value = used / total.
        "usage_colouring": {
            "default_colour": "Green",
            "levels": [
                {
                    "min": 0.8,
                    "colour": "Yellow"
                },
                {
                    "min": 0.9,
                    "colour": "Red"
                }
            ]
        },
        "exclude_prefixes": [
            "/var/lib/docker/"
        ]
    },
    // [Optional] ConditionalColour for temperature. Comparison value = temperature of component.
    "temperature": {
        "default_colour": "Green",
        "levels": [
            {
                "min": 70,
                "colour": "Yellow"
            },
            {
                "min": 85,
                "colour": "Red"
            }
        ]
    },
    // [Optional] Map of service names to service configurations
    // The ending .service is not needed.
    "services": {
        "docker": {
            // ConditionalColour for memory usage of service. Comparison value = memory usage in bytes.
            "memory_usage": {
                "default_colour": "White",
                "levels": [
                    {
                        "min": 2000,
                        "colour": "Yellow"
                    },
                    {
                        "min": 2400,
                        "colour": "Red"
                    }
                ]
            }
        },
        "ntp": {},
        "ufw": {}
    },
    // [Optional] Configuration for last login section.
    "last_login": {
        // Optionally only include logins which occur before a certain time.
        // Accepts any value which `last --since` accepts e.g. `+5days`, `yesterday`.
        "since": "yesterday",

        // Mapping of usernames to fetch the last logins for to the configuration for that user's last login.
        "users": {
            "pi": {
                // Optionally limit the maximum number of logins shown of the user.
                "max_lines": 4
            },
            "root": {
                // Optionally set the colour of the username.
                "username_colour": "Red"
            }
        }
    }
}

常见问题解答

为什么我的所有 systemd 服务都显示 0B 的内存使用量?

在某些 systemd 安装中,内存会计默认是禁用的。您可以通过取消注释或设置

DefaultMemoryAccounting=yes

/etc/systemd/system.conf 中,然后运行 systemctl daemon-reexec 来启用它。
有关更多详细信息,请参阅此 stackoverflow 问题

替代方案

  • motd - yboetz 的 "每日消息" 脚本集合
  • rust-motd - "美观、实用的 MOTD 生成,无需运行时依赖" 由 rust-motd 提供

致谢

此程序部分源自 rust-motd,特别是在格式化和处理最后登录解析方面。

依赖关系

~6–18MB
~192K SLoC