OS Checker Beta

Plug-ins

How it works

Add any additional information, beyond OS and package status, by dropping executable files into /etc/oschecker/plugins.d/. The filename becomes the field name, whatever the file prints to stdout becomes the value. Use any programming language, as long as the file is executable. Plug-ins run on every checkin - once an hour by default - so keep them quick. For example:

/etc/oschecker/plugins.d/disk-usage-var.sh

#!/bin/sh

# Disk usage of the filesystem holding /var

df -P --block-size=1000000 /var | LC_ALL=C awk 'NR==2 {printf "%.1f GB of %.1f GB (%s)\n", $3/1000, $2/1000, $5}'

/etc/oschecker/plugins.d/backup-age.py

#!/usr/bin/env python3

# Get the age of the latest backup file

import pathlib, time

mtime = pathlib.Path("/var/backups/latest.tar.gz").stat().st_mtime

print(f"{(time.time() - mtime) / 3600:.1f}h")

The fields show up on the machine, next to OS and package status.

$ oschecker machine

name:web-server-01

os:Debian 13

packages:up to date

disk-usage-var:24.8 GB of 40.0 GB (62%)

backup-age:3.2h

Running oschecker checkin --dry-run executes your plugin scripts, so you can check their output before the next scheduled checkin.

Examples

Starting points rather than finished plug-ins - read one before installing it, and adjust it to your machine. Some have a value at the top to change, like a domain or a service, and some need a program that may not be installed.

Copy the install command with the button next to each plug-in. For example:

curl -fsSL https://oschecker.com/plugin-examples/uptime.sh | sudo install -m 755 /dev/stdin /etc/oschecker/plugins.d/uptime.sh

System

hostname.sh
Network hostname of the machine
uptime.sh
Time since the last boot
system-age.py
Days since the OS was installed
memory.sh
Memory usage
apt-reboot-required.sh
Whether a reboot is required on APT-based systems
dnf-reboot-required.sh
Whether a reboot is required on DNF-based systems

Storage

disk-usage-var.sh
Disk usage of the filesystem holding /var
folder-size-bin.sh
Disk usage of a directory
file-age.py
Age of a file in days
raid-status.sh
State of software RAID arrays and ZFS pools

Hardware

hardware-model.sh
Hardware vendor and model
drive-health.sh
Health status of all physical disks

Updates

flatpak-updates.sh
Available Flatpak updates
python-uv-updates.sh
Outdated packages in a Python project managed by uv

Services and logs

service-status.sh
Status of a systemd service
timer-status.sh
Status of a systemd timer
journal-errors.sh
Error-level journal entries from the last 24 hours

Security

listening-ports.sh
Listening external ports and their process owner
ssh-auth-failures.sh
Number of failed SSH login attempts in the last 24 hours
last-logins.sh
The 5 most recent logins
sudo-users.sh
Users with administrative privileges

Domains

certificate-expiry.sh
Expiry date of a domain's TLS certificate
domain-expiry.sh
Registration expiry date of a domain
dns-a-record.sh
Current DNS A record of a domain
dns-nameservers.sh
Nameservers currently answering for a domain

More use cases

Ideas not covered by the examples:

storage
disk io, temperature
cpu
load, top processes
network
throughput, public IP, ping
processes
count, top offenders
filesystem
database size, cache size, backup age
logs
Nginx access, app logs, recently updated packages
stats
web requests, database queries, dataset rows, billing status
AI and APIs
LLM token usage, API quotas and rate limits, spend this month
security
CrowdSec, Fail2Ban
dependencies
outdated Python packages, Node modules
containers
Docker, Podman
local packages
Snap, AppImage