Your IP : 3.15.12.133


Current Path : /lib64/nagios/plugins/nccustom/
Upload File :
Current File : //lib64/nagios/plugins/nccustom/check-rpmdb-integrity.sh

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

## check-rpmdb-integrity
## Created by Ihor Bilyi
##       Namecheap

##  This NRPE check "RPM Database Integrity" check the integrity of the RPM database packages file on shared hosting servers.


## Nagios Status
## 0 = OK (RPM database OK)
## 2 = CRITICAL (RPM database is corrupted)
## 3 = UNKNOWN (Max attempts reached)


##input option
PROGNAME=${0##*/}

print_usage() {
    echo ""
    echo "Usage: $PROGNAME  --help"
}

print_help() {
    print_usage
    echo ""
    echo "This check controls the integrity of the RPM database packages file on shared hosting servers (see TOP-1102)"
    echo ""
    echo "--help Print this help screen"
    echo ""
    exit 3
}

rpmdbcheck () {
    timeout -s 9 10m repoquery --quiet --installed -a > /dev/null
    resrc=$?
}

while [ $# -gt 0 ]; do

    case "$1" in
        --help)
        print_help
         ;;

        -h)
        print_help
         ;;

        *)
        echo >&2 "Unknown argument: $1"
        print_usage
        exit 3
        ;;

        esac
        shift
done
# Initialize attempt counter
attempt=0
max_attempts=10
dnf_lockfile='/var/cache/dnf/metadata_lock.pid'

while (( attempt < max_attempts )); do
    if [ -f $dnf_lockfile ]; then
        dnf_pid=$(grep -E -m 1 '^[0-9]*$' $dnf_lockfile)
        if [ -n "$dnf_pid" ]; then         
            if kill -0 "$dnf_pid" 2>/dev/null; then
                echo "Detected dnf lock file with PID $dnf_pid"
                sleep 10
                ((attempt++))
            else
                rpmdbcheck
                break
            fi
        else
            rpmdbcheck
            break
        fi
    else
        rpmdbcheck
        break
    fi
done

if (( attempt >= max_attempts )); then
    echo "UNKNOWN (Max attempts reached)"
    exit 3
fi

if  [[ $resrc -eq 0 ]] ; then
    echo "OK (RPM database OK)"
    exit 0
else
    echo "CRITICAL (RPM database is corrupted)"
    exit 2
fi

?>