monitoring/check_dns.sh
Christoph 762e6116d9 check_dns.sh: redesign
check_vpn.sh: redisign
check_postfix.sh: Add support for Debian 9 (stretch).
2017-05-17 02:07:59 +02:00

188 lines
3.8 KiB
Bash
Executable File

#!/usr/bin/env bash
check_string_ps=""
if [[ -f "/usr/sbin/named" ]] ; then
check_string_ps="/usr/sbin/named"
fi
alternate_addr="oopen.de google.com heise.de debian.org ubuntu.com"
# - used, if systemd is NOT supported
bind_init_script=""
if [[ -x "/etc/init.d/bind9" ]] ; then
bind_init_script="/etc/init.d/bind9"
fi
# - Used if systemd is supported
# -
service_name=bind9
LOCK_DIR=`mktemp -d`
#---------------------------------------
#-----------------------------
# Base Function(s)
#-----------------------------
#---------------------------------------
fatal(){
echo ""
echo -e " [ Fatal ] $*"
echo ""
echo -e "\tScript terminated.."
echo ""
rm -rf $LOCK_DIR
exit 1
}
error (){
echo ""
echo -e " [ Error ] $*"
echo ""
}
warn (){
echo ""
echo -e " [ Warn ] $*"
echo ""
}
info (){
echo ""
echo -e " [ Info ] $*"
echo ""
}
ok (){
echo ""
echo -e " [ Ok ] $*"
echo ""
}
trim() {
local var="$*"
var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters
var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters
echo -n "$var"
}
#---------------------------------------
#-----------------------------
# Check some prerequisites
#-----------------------------
#---------------------------------------
# - Running in a terminal?
# -
if [[ -t 1 ]] ; then
terminal=true
LOGGING=true
else
terminal=false
LOGGING=false
fi
# - Running in a terminal?
# -
if [[ -t 1 ]] ; then
terminal=true
LOGGING=true
else
terminal=false
LOGGING=false
fi
if [[ -z $check_string_ps ]]; then
fatal "$(basename $0): Bind Nameservice seems NOT to be installed"
fi
# - Systemd supported ?
# -
systemd=$(which systemd)
systemctl=$(which systemctl)
systemd_supported=false
if [[ -n "$systemd" ]] && [[ -n "$systemctl" ]] ; then
systemd_supported=true
else
if [[ ! -x $bind_init_script ]]; then
fatal "$(basename $0): Missing Bind Init-Script!"
fi
fi
#---------------------------------------
#-----------------------------
# Check if Bind Nameservice is running
#-----------------------------
#---------------------------------------
if $LOGGING ; then
echo -e "\n Check if Bind Nameservice is running.."
echo -e " ======================================"
fi
for ip_addr in $alternate_addr ; do
ping -c3 $ip_addr >> /dev/null 2>&1
if [ $? -eq 0 ]; then
PID=$(ps -e f | grep -E "[[:digit:]]\ ${check_string_ps}"| grep -v grep | awk '{print$2}')
if [[ "X${PID}" = "X" ]]; then
break
else
if $LOGGING ; then
ok "Bind Nameservice is up and running."
fi
exit 0
fi
fi
done;
error "Bind Nameservice seems to be down! Trying to restart service now.."
if $systemd_supported ; then
$systemctl stop $service_name > /dev/null 2> ${LOCK_DIR}/err_msg.log
if [[ $? -ne 0 ]]; then
error "$(cat ${LOCK_DIR}/err_msg.log)"
fi
sleep 10
$systemctl start $service_name > /dev/null 2> ${LOCK_DIR}/err_msg.log
if [[ $? -ne 0 ]]; then
error "$(cat ${LOCK_DIR}/err_msg.log)"
fi
else
$bind_init_script stop > /dev/null 2>&1
if [[ $? -ne 0 ]]; then
error "Stopping Bind Nameservice failed!"
fi
sleep 10
$bind_init_script start > /dev/null 2>&1
if [[ $? -ne 0 ]]; then
error "Starting Bind Nameservice failed!"
fi
fi
declare -i counter=0
PID=$(ps -e f | grep -E "[[:digit:]]\ ${check_string_ps}"| grep -v grep | awk '{print$2}')
while [[ "X${PID}" = "X" ]]; do
sleep 1
PID=$(ps -e f | grep -E "[[:digit:]]\ ${check_string_ps}"| grep -v grep | awk '{print$2}')
if [[ $counter -gt 10 ]]; then
break
else
((counter++))
fi
done
if [[ "X${PID}" = "X" ]] ; then
error "Restarting Bind Nameservice failed!"
else
ok "Bind Nameservice is up and running."
fi
exit 0;