whoami7 - Manager
:
/
lib64
/
nagios
/
plugins
/
Upload File:
files >> //lib64/nagios/plugins/check_newbackup
#!/bin/bash #============================================================================== # # FILE: check_newbackup.sh # (Nagios Check for backups) # # USAGE: check_newbackup.sh [-h] [-V] [-v] # # DESCRIPTION: Checking cPanel backups. # # REQUIREMENTS: cPanel # BUGS: --- # NOTES: https://track.namecheap.net/browse/TO-2821 # AUTHOR: Ivan Zharikov, Ivan Z, ivan.zharikov@namecheap.com # COMPANY: Namecheap, Inc. # VERSION: 0.2 # CREATED: 04.03.2018 #============================================================================== VERSION='0.2' APPNAME=$(basename "$0") CPANEL_MAINDIR='/usr/local/cpanel' CONFF_LEGACY='/etc/cpbackup.conf' CONFF_NEW='/var/cpanel/backups/config' BACKUP_LOGDIR="${CPANEL_MAINDIR}/logs/cpbackup" CPANEL_BACKUPLOGDIR="${CPANEL_MAINDIR}/logs/cpbackup" TMPL_SUCCESS='Final state is Backup::Success' TMPL_COMPLETED='Completed at' E_COMMAND_NOTFOUND=127 E_INVALID_OPTION=128 E_INVALID_ARGUMENT=128 NAGIOS_EC_OK=0 NAGIOS_EC_WARNING=1 NAGIOS_EC_CRITICAL=2 NAGIOS_EC_UNKNOWN=3 DEBUG='' function help() { cat <<EOT This is a Nagios check for cPanel backups. Usage: $APPNAME [-h] [-V] [-v] -h this help -v More verbose output. -V version EOT } function version() { echo "'$APPNAME', version: $VERSION" } # Check: Is it only parameter? function onlyprm() { AMOUNT=$1 if [[ $AMOUNT > 1 ]]; then echo "The number of parameters can not be more than one! Use: $APPNAME -h" exit $E_INVALID_OPTION fi } # Cutting whitespases function trim (){ local TRIMMED="$1" TRIMMED="${TRIMMED## }" TRIMMED="${TRIMMED%% }" echo "$TRIMMED" } function numfilesdir () { local CATALOG="$1" FILESTOTAL=$(find "${CATALOG}"/ -maxdepth 1 -type f | wc -l) echo "$FILESTOTAL" } function intervall (){ local SEQUENCE="$1" declare ary=( $(echo $SEQUENCE | sed 's/,/ /g') ) if [ ${#ary[*]} == 1 ];then echo "1" else echo $[ (${ary[1]} - ${ary[0]}) ] fi } while getopts "hVv" opt; do case $opt in h) onlyprm $# help exit "0" ;; V) onlyprm $# version exit "0" ;; v) DEBUG=1 ;; \?) echo "Invalid option: -$OPTARG" >&2 exit "$E_INVALID_OPTION" ;; :) echo "Option -OPTARG requires an argument." >&2 exit "$E_INVALID_ARGUMENT" ;; esac done # Check if cPanel installed on the server x=$(${CPANEL_MAINDIR}/cpanel -V 2>/dev/null) if [[ -z "$x" ]]; then [[ "$DEBUG" ]] && echo 'Cpanel not installed on this server' exit "$NAGIOS_EC_UNKNOWN" fi # Check for both config files if [ ! -r "$CONFF_LEGACY" ] && [ ! -r "$CONFF_NEW" ]; then [[ "$DEBUG" ]] && echo 'There are not any configuration files!' exit "$NAGIOS_EC_CRITICAL" fi # Check if backup partition is mounted if [[ ! $(df -h|grep backup) ]]; then echo 'Backup partition is not mounted' exit "$NAGIOS_EC_CRITICAL" fi # There are array of triggers # by default enabled both - enabled legacy declare -A array_states=(["LEGACY"]="1" ["NEW"]="1") if [ ! -e "$CONFF_LEGACY" ] then array_states["LEGACY"]="0" else [[ $(cat ${CONFF_LEGACY} | tr '[:upper:]' '[:lower:]'|awk '/backupenable/ {print $2}') == "no" ]] && array_states["LEGACY"]="0" fi [[ $(whmapi1 backup_config_get|tr '[:upper:]' '[:lower:]'|awk '/backupenable/ {print $2}') == "0" ]] && array_states["NEW"]="0" # Analysis # What's going on with backups if [ ${array_states["LEGACY"]} == 0 ] && [ ${array_states["NEW"]} == 0 ] then [[ "$DEBUG" ]] && echo "cPanel backup disabled" exit $NAGIOS_EC_CRITICAL elif [ ${array_states["LEGACY"]} == 1 ] && [ ${array_states["NEW"]} == 1 ] then [[ "$DEBUG" ]] && echo "legacy backup still enabled" exit $NAGIOS_EC_WARNING elif [ ${array_states["LEGACY"]} == 1 ] && [ ${array_states["NEW"]} == 0 ] then [[ "$DEBUG" ]] && echo "legacy backup enabled" exit $NAGIOS_EC_WARNING fi # A test output of 'backup type' #echo -e "${!array_states[*]} \n ${array_states[*]}" # Specify when and how often # type = d | w | m (daily or weekly or monthly) declare -A array_schedule=(["type"]="d" ["backupdays"]="0" ["modified"]="0") RET='' DAYE=$(whmapi1 backup_config_get | grep daily_enable); DAYE=$(trim ${DAYE#*:}) WEKE=$(whmapi1 backup_config_get | grep weekly_enable); WEKE=$(trim ${WEKE#*:}) MONE=$(whmapi1 backup_config_get | grep monthly_enable); MONE=$(trim ${MONE#*:}) if [ "$DAYE" -eq 1 ] && [ ${array_schedule["modified"]} -eq 0 ] then array_schedule["modified"]="1" RET=$(whmapi1 backup_config_get | grep backupdays); RET=${RET#*:} array_schedule["backupdays"]=$(trim ${RET}) elif [ "$WEKE" -eq 1 ] && [ ${array_schedule["modified"]} -eq 0 ] then array_schedule["modified"]="1" RET=$(whmapi1 backup_config_get | grep weekly_day); RET=${RET#*:} array_schedule["backupdays"]=$(trim ${RET}) array_schedule["type"]="w" elif [ "$MONE" -eq 1 ] && [ ${array_schedule["modified"]} -eq 0 ] then RET=$(whmapi1 backup_config_get | grep monthly_dates); RET=${RET#*:} array_schedule["backupdays"]=$(trim ${RET}) array_schedule["type"]="m" fi # A test output of 'Schedule' #echo -e "${!array_schedule[*]} \n ${array_schedule[*]}" # Are there any logfiles? if [[ $(numfilesdir ${CPANEL_BACKUPLOGDIR}) == 0 ]]; then [[ "${DEBUG}" ]] && echo "There are no backups logfiles." exit 2 fi # Were backups performed successfull? files_array=( $(grep -l "${TMPL_SUCCESS}" ${CPANEL_BACKUPLOGDIR}/*) ) # How many? if [[ "${#files_array[@]}" == 0 ]];then [[ "${DEBUG}" ]] && echo "Non of successfull backup has been done" exit 2 fi # Backuping interval calculation # # Get sorted list of the logs files sorted_filenames=($(printf '%s\n' "${files_array[@]}"|sort )) # get backup end date (unixtime) from the last logfile BACKUP_DATE_UTIME=$(grep "${TMPL_COMPLETED}" ${sorted_filenames[@]:(-1)}) # Successfully complete (unixtime) BACKUP_END_DATE_UTIME=$(date +%s -d "${BACKUP_DATE_UTIME#*at }") NOW_UTIME=$(date +%s) INTERVAL_DAYS=$(intervall ${array_schedule["backupdays"]}) REAL_INTERVAL_DAYS=$[ (${NOW_UTIME} - ${BACKUP_END_DATE_UTIME}) / 60 / 60 / 24 ] case ${array_schedule["type"]} in d) if [ "${REAL_INTERVAL_DAYS}" -le "${INTERVAL_DAYS}" ]; then [[ "${DEBUG}" ]] && echo "Daily backup is Ok" exit 0 else [[ "${DEBUG}" ]] && echo "Successfull daily backup has been performed too long ago" exit 2 fi ;; w) if [ "${REAL_INTERVAL_DAYS}" -le "${INTERVAL_DAYS}" ]; then [[ "${DEBUG}" ]] && echo "Weekly backup is Ok" exit 0 else [[ "${DEBUG}" ]] && echo "Successfull weekly backup has been performed too long ago" exit 2 fi ;; m) if [ "${REAL_INTERVAL_DAYS}" -le "${INTERVAL_DAYS}" ]; then [[ "${DEBUG}" ]] && echo "Monthly backup is Ok" exit 0 else [[ "${DEBUG}" ]] && echo "Successfull monthly backup has been performed too long ago" exit 2 fi ;; esac
Copyright ©2021 || Defacer Indonesia