monitoring/check_vpn.sh

190 lines
4.0 KiB
Bash
Executable File

#!/usr/bin/env bash
check_string_ps=""
if [[ -f "/usr/sbin/openvpn" ]] ; then
check_string_ps="/usr/sbin/openvpn"
fi
check_string_ps_plus="--daemon"
# - used, if systemd is NOT supported
init_script=""
if [[ -x "/etc/init.d/openvpn" ]] ; then
init_script="/etc/init.d/openvpn"
fi
# - Used if systemd is supported
# -
service_name=openvpn
LOCK_DIR=`mktemp -d`
#---------------------------------------
#-----------------------------
# Base Function(s)
#-----------------------------
#---------------------------------------
clean_up() {
# Perform program exit housekeeping
rm -rf $LOCK_DIR
exit $1
}
fatal(){
echo ""
echo -e " [ Fatal ] $*"
echo ""
echo -e "\tScript terminated.."
echo ""
clean_up 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"
}
# - The trap command allows you to execute a command when a signal
# - is received by your script.
# -
trap clean_up SIGHUP SIGINT SIGTERM
#---------------------------------------
#-----------------------------
# 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): OpenVPN Service 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 $init_script ]]; then
fatal "$(basename $0): Missing Bind Init-Script!"
fi
fi
#---------------------------------------
#-----------------------------
# Check if OpenVPN Service is running
#-----------------------------
#---------------------------------------
if $LOGGING ; then
echo -e "\n Check if OpenVPN Service is running.."
echo -e " ====================================="
fi
PID=$(ps -e f | grep -E "[[:digit:]]\ ${check_string_ps}" | grep "\ ${check_string_ps_plus}\ " | grep -v grep | awk '{print$2}')
if [[ "X${PID}" = "X" ]]; then
error "OpenVPN Service 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
$init_script stop > /dev/null 2>&1
if [[ $? -ne 0 ]]; then
error "Stopping OpenVPN Service failed!"
fi
sleep 10
$init_script start > /dev/null 2>&1
if [[ $? -ne 0 ]]; then
error "Starting OpenVPN Service failed!"
fi
fi
declare -i counter=0
PID=$(ps -e f | grep -E "[[:digit:]]\ ${check_string_ps}" | grep "\ ${check_string_ps_plus}\ " | grep -v grep | awk '{print$2}')
while [[ "X${PID}" = "X" ]]; do
sleep 1
PID=$(ps -e f | grep -E "[[:digit:]]\ ${check_string_ps}" | grep "\ ${check_string_ps_plus}\ " | grep -v grep | awk '{print$2}')
if [[ $counter -gt 10 ]]; then
break
else
((counter++))
fi
done
if [[ "X${PID}" = "X" ]] ; then
error "Restarting OpenVPN Service failed!"
else
ok "OpenVPN Service is up and running."
fi
else
if $LOGGING ; then
ok "OpenVPN Service is up and running."
fi
fi
clean_up