check_webservice_load.sh: add parameter 'CONFLICTING_SCRIPTS' - don't run this script if anny given conflicting scripts are running.

This commit is contained in:
Christoph 2021-10-22 14:22:17 +02:00
parent 0db9193023
commit 404ab8a891
2 changed files with 127 additions and 53 deletions

View File

@ -24,21 +24,6 @@ check_website=false
ommit_curl_check_nginx=false ommit_curl_check_nginx=false
vserver_guest=false vserver_guest=false
if [[ ! -f "$conf_file" ]]; then
echo ""
echo -e " [ Fatal ] Configuration file '$(basename ${conf_file})' not found!"
echo ""
echo -e "\tScript terminated.."
echo ""
exit 1
else
source "$conf_file"
fi
# - Lock directory exists, until the script ends. So # - Lock directory exists, until the script ends. So
# - we can check, if a previos instanze is already running. # - we can check, if a previos instanze is already running.
# - # -
@ -52,6 +37,16 @@ LOCK_DIR=`mktemp -d`
#----------------------------- #-----------------------------
#--------------------------------------- #---------------------------------------
clean_up() {
# Perform program exit housekeeping
rm -rf "$LOCK_DIR"
if $LOGGING ; then
echo ""
fi
exit $1
}
fatal(){ fatal(){
echo "" echo ""
if $terminal ; then if $terminal ; then
@ -141,6 +136,103 @@ trim() {
echo -n "$var" echo -n "$var"
} }
## - #---------------------------------------
## - #-----------------------------
## - # Job is already running?
## - #-----------------------------
## - #---------------------------------------
## -
## - ## - If job already runs, stop execution..
## - ## -
## - if mkdir "$LOCK_DIR" 2> /dev/null ; then
## -
## - ## - Remove lockdir when the script finishes, or when it receives a signal
## - trap 'rm -rf "$LOCK_DIR"' 0 2 15
## -
## - else
## -
## - datum=`date +"%d.%m.%Y"`
## -
## - msg="[ Error ]: A previos instance of \"`basename $0`\" seems already be running.\n\tExiting now.."
## -
## - echo ""
## - echo "[ Error ]: A previos instance of that script \"`basename $0`\" seems already be running."
## - echo ""
## - echo -e "\tExiting now.."
## - echo ""
## -
## - for _to_address in $to_addresses ; do
## - echo -e "To:${_to_address}\n${content_type}\nSubject:Error cronjob `basename $0` -- $datum\n${msg}\n" \
## - | sendmail -F "Error `hostname -f`" -f $from_address $_to_address
## - done
## -
## - exit 1
## -
## - fi
## - Remove lockdir when the script finishes, or when it receives a signal
trap 'rm -rf "$LOCK_DIR"' 0 2 15
# -------------
# --- Read Configurations from $conf_file
# -------------
# Some default values
#
DEFAULT_CONFLICTING_SCRIPTS="/root/bin/monitoring/check_local_webservice.sh:/tmp/check_local_webservice.LOCK"
if [[ ! -f "$conf_file" ]]; then
echo ""
echo -e " [ Fatal ] Configuration file '$(basename ${conf_file})' not found!"
echo ""
echo -e "\tScript terminated.."
echo ""
clean_up 1
else
source "$conf_file"
fi
[[ -n "$CONFLICTING_SCRIPTS" ]] || CONFLICTING_SCRIPTS="$DEFAULT_CONFLICTING_SCRIPTS"
# - Stop here, if these give scripts are running
# -
if [[ ${#CONFLICTING_SCRIPTS} -gt 0 ]] ; then
_stop_running=false
for _val in $CONFLICTING_SCRIPTS ; do
IFS=':' read -a _val_arr <<< "${_val}"
_script_name="$(basename ${_val_arr[0]})"
if [[ -n "${_val_arr[1]}" ]] && [[ -d "${_val_arr[1]}" ]] ; then
_stop_running=true
else
check_string_ps="${_val_arr[0]}"
if ps -e f | grep -E "\s+${check_string_ps}" | grep -v grep | grep -v -E "\s+vim\s+" > /dev/null ; then
_stop_running=true
fi
fi
if $_stop_running ; then
echo ""
echo "[ Error ]: The \"${_script_name}\" script is currently running, but it conflicts with this script."
echo ""
echo " Exiting now.."
echo ""
clean_up 1
fi
done
fi
#--------------------------------------- #---------------------------------------
#----------------------------- #-----------------------------
@ -564,43 +656,6 @@ if $check_website ; then
fi fi
fi fi
## - #---------------------------------------
## - #-----------------------------
## - # Job is already running?
## - #-----------------------------
## - #---------------------------------------
## -
## - ## - If job already runs, stop execution..
## - ## -
## - if mkdir "$LOCK_DIR" 2> /dev/null ; then
## -
## - ## - Remove lockdir when the script finishes, or when it receives a signal
## - trap 'rm -rf "$LOCK_DIR"' 0 2 15
## -
## - else
## -
## - datum=`date +"%d.%m.%Y"`
## -
## - msg="[ Error ]: A previos instance of \"`basename $0`\" seems already be running.\n\tExiting now.."
## -
## - echo ""
## - echo "[ Error ]: A previos instance of that script \"`basename $0`\" seems already be running."
## - echo ""
## - echo -e "\tExiting now.."
## - echo ""
## -
## - for _to_address in $to_addresses ; do
## - echo -e "To:${_to_address}\n${content_type}\nSubject:Error cronjob `basename $0` -- $datum\n${msg}\n" \
## - | sendmail -F "Error `hostname -f`" -f $from_address $_to_address
## - done
## -
## - exit 1
## -
## - fi
## - Remove lockdir when the script finishes, or when it receives a signal
trap 'rm -rf "$LOCK_DIR"' 0 2 15
#--------------------------------------- #---------------------------------------
#----------------------------- #-----------------------------
@ -2256,4 +2311,4 @@ if $check_website ; then
fi fi
exit 0 clean_up 0

View File

@ -14,6 +14,25 @@
# --- # ---
# - CONFLICTING_SCRIPTS
# -
# - The scripts listed here conflict with this script. If one of these scripts
# - is currently running, this script will be stopped.
# -
# - In addition to the script, a LOCK directory can also be specified which is
# - connected to it.
# -
# - Example:
# - CONFLICTING_SCRIPTS="
# - /root/bin/monitoring/check_webservice_load.sh
# - /root/bin/monitoring/check_remote_websites.sh:/tmp/check_remote_websites.LOCK
# -
# - Defaults to:
# - CONFLICTING_SCRIPTS="/root/bin/monitoring/check_local_webservice.sh:/tmp/check_local_webservice.LOCK"
# -
#CONFLICTING_SCRIPTS=""
# - What to check # - What to check
# - # -
check_load=true check_load=true