A powerful, production-ready CLI tool for Linux system administration and monitoring. Built in Go for speed and reliability, SysChecks extends Zabbix functionality with kernel management, update monitoring, automated maintenance, and beautiful system banners.
- π Kernel Management - Check reboot requirements and clean up old kernels
- π¦ Update Monitoring - Track system and security updates with caching
- π€ Automated Updates - Schedule automatic security/system updates via cron
- π Zabbix Integration - Native UserParameter support for monitoring
- π¨ SSH Login Banner - Beautiful system info display on login
- β‘ Performance - Fast execution with intelligent caching
- π Package Locking - Prevent specific packages from auto-updating
- π§ Multi-Distro - Supports Debian/Ubuntu, RHEL/CentOS/AlmaLinux/Rocky
curl -sSL https://raw.githubusercontent.com/yaroslav-gwit/SysChecks_v2/main/auto-install.sh | sudo bashThat's it! The script will:
- Download the latest release binary
- Install to
/opt/syschecks/and link to/usr/bin/ - Set up bash completion (if available)
- Configure cron jobs for update caching and automatic security updates
- Preserve your configuration on updates
# Download the binary
VERSION="1.0.0" # Replace with desired version
wget https://github.com/yaroslav-gwit/SysChecks_v2/releases/download/v${VERSION}/syschecks-linux-amd64
# Install
sudo mkdir -p /opt/syschecks
sudo mv syschecks-linux-amd64 /opt/syschecks/syschecks
sudo chmod +x /opt/syschecks/syschecks
sudo ln -s /opt/syschecks/syschecks /usr/bin/syschecks
# Enable bash completion
sudo syschecks completion bash > /etc/bash_completion.d/syschecks# Check if kernel reboot is needed
syschecks kernel
# Pretty-printed JSON output
syschecks kernel --json-pretty
# Sample output:
{
"kernel_needs_reboot": true,
"running_kernel": "5.15.0-91",
"latest_installed_kernel": "5.15.0-92",
"active_kernels": ["5.15.0-91", "5.15.0-92"]
}# Keep 4 most recent kernels (default)
sudo syschecks kernel cleanup
# Keep only 2 kernels
sudo syschecks kernel cleanup --keep 2# Check for updates (uses cache by default)
syschecks updates
# Force fresh check and create new cache
sudo syschecks updates --cache-create
# Pretty output
syschecks updates --json-pretty# Apply security updates only (default)
sudo syschecks apply-updates
# Apply all system updates
sudo syschecks apply-updates --system
# Ignore package lock file
sudo syschecks apply-updates --ignore-lock-file# Show system information banner
syschecks banner
# Without emojis
syschecks banner --no-emojiesTo show banner on SSH login:
echo '([ -z "$PS1" ] && true) || syschecks banner' | sudo tee /etc/profile.d/syschecks_banner.sh
sudo chmod +x /etc/profile.d/syschecks_banner.sh# Set up update cache refresh (runs every 12 hours)
sudo syschecks cron init
# Enable automatic security updates (runs daily at 4:15 AM)
sudo syschecks cron updates --security
# Enable automatic system updates
sudo syschecks cron updates --system# Initialize Zabbix agent integration
sudo syschecks zabbix initThis adds a UserParameter to your Zabbix agent configuration:
UserParameter=syschecks[*],syschecks $1Usage in Zabbix:
- Item key:
syschecks[kernel]- Kernel status - Item key:
syschecks[updates]- Update status - Item key:
syschecks[sysinfo]- System IP addresses
Prevent specific packages from being updated automatically:
Location: /opt/syschecks/package.lock.json
[
"docker-ce",
"docker-ce-cli",
"nvidia-driver",
"linux-headers"
]Locked packages will be skipped during automatic updates. Use --ignore-lock-file flag to override.
/tmp/syscheck_updates.json- Update check cache (refreshed every 12 hours)
/etc/cron.d/syschecks_cache- Update cache refresh/etc/cron.d/syschecks_updates_security- Automatic security updates/etc/cron.d/syschecks_updates_system- Automatic system updates
/var/log/syschecks_updates.log- Automatic update log
| Distribution | Package Manager | Status |
|---|---|---|
| Ubuntu 18.04+ | apt | β Tested |
| Debian 9+ | apt | β Tested |
| Pop!_OS | apt | β Tested |
| CentOS 7 | yum | β Tested |
| AlmaLinux 8+ | dnf | β Tested |
| Rocky Linux 8+ | dnf | β Tested |
| RHEL 8+ | dnf | β Tested |
| Oracle Linux 8+ | dnf | β Tested |
syschecks
βββ kernel [--json-pretty] # Check kernel reboot status
β βββ cleanup [--keep N] # Clean up old kernels
βββ updates [flags] # Check for updates
β βββ --json-pretty # Pretty JSON output
β βββ --cache-create # Create new cache
β βββ --cache-use # Use existing cache (default)
βββ apply-updates [flags] # Apply updates
β βββ --system, -s # Apply all updates (not just security)
β βββ --ignore-lock-file, -i # Ignore package lock
βββ banner [--no-emojies, -n] # Display system banner
βββ cron # Cron job management
β βββ init # Set up cache cron
β βββ updates [--security|--system] # Enable auto-updates
βββ zabbix # Zabbix integration
β βββ init # Initialize Zabbix support
βββ sysinfo # System IP addresses (JSON)
βββ version [--verbose, -v] # Show version info
Ensure /usr/bin is in your PATH:
echo $PATH
which syschecksMost commands work without root, but some require it:
sudo syschecks updates --cache-create
sudo syschecks apply-updates
sudo syschecks kernel cleanupRefresh the cache manually:
sudo syschecks updates --cache-create-
Verify UserParameter was added:
grep syschecks /etc/zabbix/zabbix_agentd.conf
-
Test from command line:
syschecks kernel
-
Test via zabbix_get:
zabbix_get -s 127.0.0.1 -k "syschecks[kernel]"
Verify the file exists and has correct permissions:
ls -la /opt/syschecks/package.lock.json
cat /opt/syschecks/package.lock.json- Go 1.21 or later
- Git
# Clone the repository
git clone https://github.com/yaroslav-gwit/SysChecks_v2.git
cd SysChecks_v2
# Standard build
./build.sh
# The binary will be in ./bin/syschecks
./bin/syschecks version# Cross-compilation
./build-advanced.sh
# Docker-based build (for maximum compatibility)
./docker-build.sh
# Manual build with version info
VERSION=$(git describe --tags --always --dirty)
COMMIT=$(git rev-parse --short HEAD)
DATE=$(date -u '+%Y-%m-%d_%H:%M:%S_UTC')
go build -ldflags="-X 'syschecks/cmd.Version=$VERSION' \
-X 'syschecks/cmd.GitCommit=$COMMIT' \
-X 'syschecks/cmd.BuildDate=$DATE'" \
-o ./bin/syschecks- Changelog - Version history and release notes
- Releases Guide - How to create releases
- Architecture Overview - System design and data flow
- Command Reference - Detailed command documentation
- Development Guide - Contributing and development setup
- Zabbix Integration - Zabbix setup and templates
- Project Constitution - Coding standards and best practices
Contributions are welcome! Please read our Development Guide and Constitution before submitting PRs.
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Follow the coding standards in CONSTITUTION.md
- Test your changes thoroughly
- Commit with clear messages:
feat: add new feature - Push and create a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Cobra CLI framework
- Inspired by the need for better system monitoring tools
- Thanks to all contributors and users
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with β€οΈ for Linux sysadmins