163 lines
4.8 KiB
Plaintext
163 lines
4.8 KiB
Plaintext
|
#!/bin/bash
|
||
|
#
|
||
|
# https://www.monitoringexchange.org/inventory/Check-Plugins/Operating-Systems/Linux/Check-Processes-and-Ports
|
||
|
# Usage: .//check_system_pp
|
||
|
#
|
||
|
# Description:
|
||
|
# This plugin determines whether the server
|
||
|
# is running properly. It will check the following:
|
||
|
# * Are all required processes running?
|
||
|
# * Are all the required TCP/IP ports open?
|
||
|
#
|
||
|
# Created: 27.01.2006 (FBA)
|
||
|
#
|
||
|
# Changes: 28.01.2006 added yellow check (FBA)
|
||
|
# 29.01.2006 change "px -ef" to "ps -ax" (FBA). Problems with long arguments
|
||
|
# 31.01.2006 added all OK Status with all procs and ports (FBA)
|
||
|
# 15.07.2006 change "ps -ax" to "ps ax" (FBA). Also problems with long arguments under RedHat 3/4
|
||
|
# 17.07.2006 Plugin rewrite and bugfixes (Magnus Glantz)
|
||
|
# 19.07.2006 Removed utils.sh dependency.
|
||
|
#
|
||
|
#
|
||
|
#
|
||
|
|
||
|
COMMON_SH_LIB=/usr/lib/nagios/plugins/isti-cnr/check_library.sh
|
||
|
if [ -f $COMMON_SH_LIB ] ; then
|
||
|
. $COMMON_SH_LIB
|
||
|
else
|
||
|
PLUGIN_DIR=/usr/lib/nagios/plugins
|
||
|
ISTI_PLUGDIR=$PLUGIN_DIR/isti-cnr
|
||
|
fi
|
||
|
|
||
|
# We want the list of processes and ports to be customizable without editing this script
|
||
|
PP_CONF=$ISTI_PLUGDIR/check_system_pp.conf
|
||
|
if [ -f $PP_CONF ] ; then
|
||
|
. $PP_CONF
|
||
|
else
|
||
|
##################################################################################
|
||
|
#
|
||
|
# Processes to check
|
||
|
PROCLIST_RED="sshd"
|
||
|
PROCLIST_YELLOW="syslogd cron"
|
||
|
|
||
|
# Ports to check
|
||
|
PORTLIST="22"
|
||
|
|
||
|
##################################################################################
|
||
|
fi
|
||
|
|
||
|
PATH="/usr/bin:/usr/sbin:/bin:/sbin"
|
||
|
|
||
|
STATE_OK=0
|
||
|
STATE_WARNING=1
|
||
|
STATE_CRITICAL=2
|
||
|
STATE_UNKNOWN=3
|
||
|
STATE_DEPENDENT=4
|
||
|
|
||
|
print_gpl() {
|
||
|
echo "This program is free software; you can redistribute it and/or modify"
|
||
|
echo "it under the terms of the GNU General Public License as published by"
|
||
|
echo "the Free Software Foundation; either version 2 of the License, or"
|
||
|
echo "(at your option) any later version."
|
||
|
echo ""
|
||
|
echo "This program is distributed in the hope that it will be useful,"
|
||
|
echo "but WITHOUT ANY WARRANTY; without even the implied warranty of"
|
||
|
echo "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"
|
||
|
echo "GNU General Public License for more details."
|
||
|
echo ""
|
||
|
echo "You should have received a copy of the GNU General Public License"
|
||
|
echo "along with this program; if not, write to the Free Software"
|
||
|
echo "Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA"
|
||
|
}
|
||
|
|
||
|
print_help(){
|
||
|
echo ""
|
||
|
echo "System process and port check script for Nagios."
|
||
|
echo ""
|
||
|
echo "Usage: ./check_system_pp"
|
||
|
echo "Website: http://www.nagiosexchange.org"
|
||
|
echo "https://www.monitoringexchange.org/inventory/Check-Plugins/Operating-Systems/Linux/Check-Processes-and-Ports"
|
||
|
echo ""
|
||
|
print_gpl
|
||
|
}
|
||
|
|
||
|
while test -n "$1"
|
||
|
do
|
||
|
case "$1" in
|
||
|
*) print_help; exit $STATE_OK;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
check_processes_red()
|
||
|
{
|
||
|
PROCESS="0"
|
||
|
ERROR_PROCS=""
|
||
|
for PROC in `echo $PROCLIST_RED`; do
|
||
|
if [ `ps -ef | grep -w $PROC | grep -v grep | wc -l` -lt 1 ]; then
|
||
|
PROCESS=1
|
||
|
ERROR_PROCS="$ERROR_PROCS""$PROC ";
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if [ $PROCESS -eq "1" ]; then
|
||
|
exit_red=$STATE_CRITICAL
|
||
|
elif [ $PROCESS -eq "0" ]; then
|
||
|
exit_red=$STATE_OK
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
check_processes_yellow()
|
||
|
{
|
||
|
PROCESS="0"
|
||
|
WARNING_PROCS=""
|
||
|
for PROC in `echo $PROCLIST_YELLOW`; do
|
||
|
if [ `ps -ef | grep $PROC | grep -v grep | wc -l` -lt 1 ]; then
|
||
|
PROCESS=1
|
||
|
WARNING_PROCS="$WARNING_PROCS""$PROC ";
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if [ $PROCESS -eq "1" ]; then
|
||
|
exit_yellow=$STATE_WARNING
|
||
|
elif [ $PROCESS -eq "0" ]; then
|
||
|
exit_yellow=$STATE_OK
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
check_ports()
|
||
|
{
|
||
|
PORTS="0"
|
||
|
ERROR_PORTS=""
|
||
|
for NUM in `echo $PORTLIST`; do
|
||
|
if [ `netstat -an | grep LISTEN | grep -w $NUM | grep -v grep | wc -l` -lt 1 ]; then
|
||
|
PORTS=1
|
||
|
ERROR_PORTS="$ERROR_PORTS""$NUM ";
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if [ $PORTS -eq "1" ]; then
|
||
|
exit_ports=$STATE_CRITICAL
|
||
|
elif [ $PORTS -eq "0" ]; then
|
||
|
exit_ports=$STATE_OK
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
check_processes_red
|
||
|
check_ports
|
||
|
check_processes_yellow
|
||
|
|
||
|
final_exit=`expr $exit_ports + $exit_red + $exit_yellow`
|
||
|
|
||
|
if [ $final_exit -eq "0" ]; then
|
||
|
echo "SYSTEM OK - All monitored resources OK. Processes: $PROCLIST_RED $PROCLIST_YELLOW. Ports: $PORTLIST."
|
||
|
exitstatus=$STATE_OK
|
||
|
elif [ $final_exit -eq "1" ]; then
|
||
|
echo "SYSTEM WARNING - Processes DOWN. ($WARNING_PROCS)."
|
||
|
exitstatus=$STATE_WARNING
|
||
|
elif [ $final_exit -ge "1" ]; then
|
||
|
echo "SYSTEM CRITICAL - Resources DOWN! Processes: $ERROR_PROCS $WARNING_PROCS. Ports: $ERROR_PORTS"
|
||
|
exitstatus=$STATE_CRITICAL
|
||
|
fi
|
||
|
|
||
|
exit $exitstatus
|