flipje

nagios_check_cron_changes

Mar 9th, 2012
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.13 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Dit script checkt of de crontab op een machine veranderd is.
  4. # we doen een crontab -l , redirecten dit naar een file en diffen deze met een statefile.
  5. # de check is te resetten door de statefile /var/tmp/croncheck-${HOST}.old te verwijderen. de check zal dan zelf opnieuw de info gatheren.
  6.  
  7.  # GLOBAL VARIABLES:
  8.  
  9.   PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
  10.   SCRIPT_PATH="${0}"
  11.   STATE_OK=0
  12.   STATE_WARNING=1
  13.   STATE_CRITICAL=2
  14.   STATE_UNKNOWN=3
  15.  
  16.  
  17.   # Functions:
  18.  
  19.   # The main function.
  20.   function fMain()
  21. {
  22.   local DATE=`date '+%Y%m%d'`
  23.   local USER="nagios"
  24.   local HOST=${1}
  25.   local SSH="ssh -i /home/nagios/.ssh/id_rsa"
  26.  
  27.   # Check whether any arguments are given:
  28.   if [ ${#} -eq 0 ]
  29.   then
  30.     fShowUsage
  31.     exit "${STATE_UNKNOWN}"
  32.   fi
  33.  
  34.   if [ -z "${HOST}" ]
  35.   then
  36.     fShowUsage
  37.     exit "${STATE_UNKNOWN}"
  38.   fi
  39.  
  40.   # Check whether we have SSH access:
  41.   if ( ! ${SSH} -o 'BatchMode yes' -qq "${USER}@${HOST}" exit 0 )
  42.   then
  43.     echo "No SSH access to host \"${HOST}\"."
  44.     exit "${STATE_UNKNOWN}"
  45.   fi
  46.  
  47.  #check state file  
  48.   if [ ! -e /var/tmp/croncheck-${HOST}.old ]
  49.   then
  50.     fCheckReset
  51.     echo "WARNING - check has been reset - a new error state file is created "
  52.     exit "${STATE_WARNING}"
  53.   fi
  54.  
  55.   # Gather the crontab information:
  56.   ${SSH} ${USER}@${HOST} sudo crontab -l |grep -Ev '(^#|^$|PATH|MAILTO)' > /var/tmp/croncheck-${HOST}.tmp
  57.  
  58.   # check exit code:
  59.    if [ ${?} != 0 ]
  60.     then
  61.       echo "Bark Bark! information gathering went wrong, script went haywire"
  62.       exit "${STATE_CRITICAL}"
  63.     fi
  64.  
  65.   # count total cron entries:
  66.   TOTAL="$(cat /var/tmp/croncheck-${HOST}.tmp |wc -l)"
  67.  
  68.   # define difference, separate timing from cron command and define changed command, replace diff <|> with nice info
  69.   DIFFS="$( diff "/var/tmp/croncheck-${HOST}.tmp" "/var/tmp/croncheck-${HOST}.old" |grep -E '(<|>)' | sed -re 's/([0-9*/,-]+[\t ]+){5}//' \
  70.  |while read line; do echo "\"$line\" "; done   |sed -e 's/">/"missing cron job:/g;s/"</"new cron job:/g' )"
  71.  
  72.   # remove old tmp file
  73.   if [ -e /var/tmp/croncheck-${HOST}.tmp ]
  74.    then
  75.       rm /var/tmp/croncheck-${HOST}.tmp
  76.   fi
  77.  
  78.   # make results  
  79.   if [ -z "${DIFFS}" ]
  80.   then
  81.      echo "ALL OK: \"${TOTAL}\" known crontab jobs on \"${HOST}\" are active "
  82.      exit ${STATE_OK}
  83.   else
  84.      echo "CRITICAL - crontab on \"${HOST}\" has changed "
  85.      echo "${DIFFS}"
  86.      exit ${STATE_CRITICAL}
  87.    fi
  88.  
  89.   return "${?}"
  90. }
  91.  
  92. # Shows usage.
  93. function fShowUsage()
  94. {
  95.   echo "Bark Bark! script went haywire"
  96.   echo "Usage: ${SCRIPT_PATH} <IP address>"
  97.   return 0
  98. }
  99.  
  100. # resets
  101. function fCheckReset()
  102. {
  103.  
  104.  # Reset state old file
  105.   if [ ! -e /var/tmp/croncheck-${HOST}.old ]
  106.      then
  107.        touch /var/tmp/croncheck-${HOST}.old
  108.        ${SSH} ${USER}@${HOST} sudo crontab -l |grep -Ev '(^#|^$|PATH|MAILTO)' > /var/tmp/croncheck-${HOST}.old
  109.   fi
  110.  
  111.   # remove old tmp file
  112.   if [ -e /var/tmp/croncheck-${HOST}.tmp ]
  113.    then
  114.       rm /var/tmp/croncheck-${HOST}.tmp
  115.   fi
  116.    
  117.   return 0
  118. }
  119.  
  120.  
  121. # Start the program:
  122. fMain "${@}"
  123.  
  124. # Exit with previous return code:
  125. exit "${?}"
Advertisement
Add Comment
Please, Sign In to add comment