File check_symlinks of Package monitoring-plugins-symlinks

#!/bin/bash

VERSION="1.0"
PATHNAME="/srv"
DEBUG=0
LINKCOUNT=0
FAILEDLINK=0

if [ -r '/usr/lib/nagios/plugins/utils.sh' ]; then
. /usr/lib/nagios/plugins/utils.sh
else
    echo "UNKOWN: could not read /usr/lib/nagios/plugins/utils.sh"
    exit 3
fi

function print_help(){
    echo "Usage: $(basename $0) -p <path>"
    echo "       checks symlinks in <path> for correctness"
    echo 
    print_revision "$(basename $0)" "$VERSION"
    support
    exit $STATE_OK
}


while getopts "hp:dv" OPTION; do
    case $OPTION in 
        h) print_help
        ;;
        v) print_revision "$(basename $0)" "$VERSION"
           exit "$STATE_OK"
        ;;
        p) PATHNAME="$OPTARG"
        ;;
        d) DEBUG=1
        ;;
    esac
done

if [ ! -d "$PATHNAME" ]; then
    echo "UNKOWN: path '$PATHNAME' not found or not exist"
    exit $STATE_UNKNOWN
fi

pushd "$PATHNAME" >/dev/null
for dir in $(/bin/ls -d "$PATHNAME"/*); do
    if [ "$DEBUG" == "1" ]; then echo "Testing: $dir"; fi
    for link in $(readlink -s "$dir"); do
        if [ "$DEBUG" == "1" ]; then echo "$dir is link, checking for referenced $link"; fi
        let LINKCOUNT=$LINKCOUNT+1
        if [ ! -d "$link" ]; then
            if [ ! -f "$link" ]; then
                let FAILEDLINK=$FAILEDLINK+1
                OUTPUT="'$PATHNAME/$link' broken; $OUTPUT"
            fi
        fi
    done
done
popd >/dev/null

if [ -z "$OUTPUT" ]; then
    echo "OK: $LINKCOUNT links checked without error"
    exit $STATE_OK
else
    echo "CRITICAL: $FAILEDLINK/$LINKCOUNT link(s) broken -> $OUTPUT"
    exit $STATE_CRITICAL
fi
openSUSE Build Service is sponsored by