check_webservice_load.sh: add support of 'MariaDB'.

This commit is contained in:
Christoph 2023-08-13 16:06:42 +02:00
parent b6bbf99bea
commit d633fdc223
2 changed files with 334 additions and 7 deletions

View File

@ -20,6 +20,7 @@ LOCK_DIR="/tmp/${script_name%%.*}.LOCK"
# - # -
check_load=false check_load=false
check_mysql=false check_mysql=false
check_mariadb=false
check_postgresql=false check_postgresql=false
check_apache=false check_apache=false
check_nginx=false check_nginx=false
@ -179,6 +180,9 @@ DEFAULT_CONFLICTING_SCRIPTS="/root/bin/monitoring/check_local_webservice.sh"
DEFAULT_TIMEOUT_CHECK_WEBSITE=10 DEFAULT_TIMEOUT_CHECK_WEBSITE=10
DEFAULT_TIMEOUT_CHECK_PHP=10 DEFAULT_TIMEOUT_CHECK_PHP=10
DEFAULT_mysql_credential_args="--login-path=local"
DEFAULT_mariadb_credential_args=""
if [[ ! -f "$conf_file" ]]; then if [[ ! -f "$conf_file" ]]; then
echo "" echo ""
echo -e " [ Fatal ] Configuration file '$(basename ${conf_file})' not found!" echo -e " [ Fatal ] Configuration file '$(basename ${conf_file})' not found!"
@ -195,6 +199,9 @@ fi
[[ -n "$CONFLICTING_SCRIPTS" ]] || CONFLICTING_SCRIPTS="$DEFAULT_CONFLICTING_SCRIPTS" [[ -n "$CONFLICTING_SCRIPTS" ]] || CONFLICTING_SCRIPTS="$DEFAULT_CONFLICTING_SCRIPTS"
[[ -n "$mysql_credential_args" ]] || mysql_credential_args="$DEFAULT_mysql_credential_args"
[[ -n "$mariadb_credential_args" ]] || mariadb_credential_args="$DEFAULT_mariadb_credential_args"
# - Stop here, if these give scripts are running # - Stop here, if these give scripts are running
# - # -
@ -340,6 +347,77 @@ if ! $vserver_guest ; then
fi fi
if $check_mariadb ; then
MARIADBD="$(realpath $(which mariadbd) 2>/dev/null)"
if [ -z "$MARIADBD" ]; then
if [ -x "/usr/local/mysql/bin/mariadbd" ]; then
MARIADBD="$(realpath "/usr/local/mysql/bin/mariadbd")"
else
fatal 'Command \"mariadbd\" not found!'
fi
fi
MARIADB_INIT_SCRIPT=""
MARIADBD_SERVICE_FILE=""
if $systemd_supported ; then
# - Is Service exclusive controlled by systemd
# -
if systemctl -t service list-unit-files \
| grep -e "^mariadb" \
| grep -q -E "(enabled|disabled)" 2> /dev/null ; then
MARIADBD_SERVICE_FILE=$(systemctl -t service list-unit-files \
| grep -e "^mariadb.*.service" \
| grep -E " enabled" \
| awk '{print$1}'\
| head -1)
fi
fi
if [[ -z "$MARIADBD_SERVICE_FILE" ]] ; then
if [ -x "$(realpath /etc/init.d/mariadb.server)" ]; then
MARIADB_INIT_SCRIPT="/etc/init.d/mariadb.server"
elif [ -x "$(realpath /etc/init.d/mariadb)" ]; then
MARIADB_INIT_SCRIPT="/etc/init.d/mariadb"
fi
fi
if [[ -z "$MARIADB_INIT_SCRIPT" ]] && [[ -z "$MARIADBD_SERVICE_FILE" ]]; then
fatal 'Neither an init-script nor a service file for MariaDB found!'
else
MARIADB_PS_CHECK_STRING="$MARIADBD"
fi
echo "MARIADB_PS_CHECK_STRING: $MARIADB_PS_CHECK_STRING"
if [[ -z "$MARIADB_PS_CHECK_STRING" ]]; then
fatal "Cannot determin a check string for output of command 'ps ax'"
fi
if [[ -n "$MARIADB_INIT_SCRIPT" ]] ; then
MARIADBD_SAFE="$(realpath $(which mariadbd-safe) 2>/dev/null)"
if [ -z "$MARIADBD_SAFE" ]; then
if [ -x "/usr/local/mysql/bin/mariadbd-safe" ]; then
MARIADBD_SAFE="$(realpath "/usr/local/mysql/bin/mariadbd-safe")"
else
fatal 'Command \"\mariadbd-safe" not found!'
fi
fi
fi
MYADMIN="$(realpath $(which mariadb-admin) 2>/dev/null)"
if [ -z "$MYADMIN" ]; then
if [ -x "/usr/local/mysql/bin/mariadb-admin" ]; then
MYADMIN="$(realpath "/usr/local/mysql/bin/mariadb-admin")"
else
fatal 'Command \"mariadb-admin\" not found!'
fi
fi
fi
if $check_mysql ; then if $check_mysql ; then
MYSQLD=`realpath $(which mysqld) 2>/dev/null` MYSQLD=`realpath $(which mysqld) 2>/dev/null`
@ -851,6 +929,81 @@ stop_nginx() {
} }
stop_mariadb() {
send_msg=$1
send_msg=${send_msg:=true}
# - Don't Start/Stop Services if package management is running (apt,aptitude,dpkg)
# -
if ( [[ "${os_dist,,}" = "debian" ]] || [[ "${os_dist,,}" = "ubuntu" ]] ) \
&& $(lsof /var/lib/dpkg/lock >/dev/null 2>&1) ; then
warn "It seems that package management (apt,dpkg) is running. Exiting '${FUNCNAME[0]}' now.."
return 1
fi
## - Stop MariaDB Service
## -
if [[ -n "$MARIADB_INIT_SCRIPT" ]]; then
$MARIADB_INIT_SCRIPT stop > /dev/null 2>&1
else
systemctl stop "$MARIADBD_SERVICE_FILE" > /dev/null 2>&1
fi
_msg=false
sleep 5
declare -i i=0
PIDS="$(ps aux | grep -E "${MARIADB_PS_CHECK_STRING}" | grep -v grep | awk '{print$2}')"
while [ "X$PIDS" != "X" ]; do
if [ $i -eq 0 ]; then
echo "" >> $LOCK_DIR/extra_msg.txt
echo -e "\t[ Error ]: Stopping MARIADB Service failed !!!" >> $LOCK_DIR/extra_msg.txt
echo "" >> $LOCK_DIR/extra_msg.txt
echo -e "\t[ Info ]; Going to kill MARIADB Processes .." >> $LOCK_DIR/extra_msg.txt
echo "" >> $LOCK_DIR/extra_msg.txt
error "Stopping MARIADB Service failed !!!"
info "Going to kill MARIADB Processes .."
fi
if [ $i -gt 10 ]; then
echo "" >> $LOCK_DIR/extra_msg.txt
echo -e "\t[ Error ]: Killing MARIADB Processes failed !!!" >> $LOCK_DIR/extra_msg.txt
echo "" >> $LOCK_DIR/extra_msg.txt
error "Killing MARIADB Processes failed !!!"
_msg=true
break
fi
for _PID in $PIDS ; do
kill -15 $_PID > /dev/null 2>&1
done
sleep 5
PIDS="$(ps aux | grep -E "${MARIADB_PS_CHECK_STRING}" | grep -v grep | awk '{print$2}')"
i=i+1
done
if $send_msg && $_msg ; then
subject="[ Error ]: Stopping MARIADB Engine on `hostname -f` failed -- $datum"
msg="\n\n`cat $LOCK_DIR/extra_msg.txt`\n"
for _to_address in $to_addresses ; do
echo -e "To:${_to_address}\n${content_type}\nSubject:$subject\n\n${msg}\n" \
| /usr/sbin/sendmail -F "Webservice Monitor" -f $from_address $_to_address
done
fi
}
stop_mysql() { stop_mysql() {
@ -885,11 +1038,11 @@ stop_mysql() {
echo "" >> $LOCK_DIR/extra_msg.txt echo "" >> $LOCK_DIR/extra_msg.txt
echo -e "\t[ Error ]: Stopping MySQL Service failed !!!" >> $LOCK_DIR/extra_msg.txt echo -e "\t[ Error ]: Stopping MySQL Service failed !!!" >> $LOCK_DIR/extra_msg.txt
echo "" >> $LOCK_DIR/extra_msg.txt echo "" >> $LOCK_DIR/extra_msg.txt
echo -e "\t[ Info ]; Going to kill MySQL Processes (mysqld_safe).." >> $LOCK_DIR/extra_msg.txt echo -e "\t[ Info ]; Going to kill MySQL Processes .." >> $LOCK_DIR/extra_msg.txt
echo "" >> $LOCK_DIR/extra_msg.txt echo "" >> $LOCK_DIR/extra_msg.txt
error "Stopping MySQL Service failed !!!" error "Stopping MySQL Service failed !!!"
info "Going to kill MySQL Processes (mysqld_safe).." info "Going to kill MySQL Processes .."
fi fi
if [ $i -gt 10 ]; then if [ $i -gt 10 ]; then
@ -1255,6 +1408,68 @@ stop_redis() {
} }
start_mariadb() {
send_msg=$1
send_msg=${send_msg:=true}
# - Don't Start/Stop Services if package management is running (apt,aptitude,dpkg)
# -
if ( [[ "${os_dist,,}" = "debian" ]] || [[ "${os_dist,,}" = "ubuntu" ]] ) \
&& $(lsof /var/lib/dpkg/lock >/dev/null 2>&1) ; then
warn "It seems that package management (apt,dpkg) is running. Exiting '${FUNCNAME[0]}' now.."
return 1
fi
if [[ -n "$MARIADB_INIT_SCRIPT" ]]; then
$MARIADB_INIT_SCRIPT start > /dev/null 2>&1
else
systemctl start "$MARIADBD_SERVICE_FILE" > /dev/null 2>&1
fi
sleep 5
NEWPID="$(ps aux | grep -E "${MARIADB_PS_CHECK_STRING}" | grep -v grep | awk '{print$2}' | head -1) "
if [ "X${NEWPID}X" = "XX" ]; then
echo "" >> $LOCK_DIR/extra_msg.txt
echo -e "\t[ Error ]: I have started the MARIADB server, but the services is not running !!!" >> $LOCK_DIR/extra_msg.txt
echo "" >> $LOCK_DIR/extra_msg.txt
error "I have started the MARIADB server, but the service is not running !!!"
datum=`date +"%d.%m.%Y %H:%Mh"`
subject="[ Error ]: MARIADB Service on `hostname -f` NOT RUNNING -- $datum"
msg="\n\n`cat $LOCK_DIR/extra_msg.txt`\n"
for _to_address in $to_addresses ; do
echo -e "To:${_to_address}\n${content_type}\nSubject:$subject\n\n${msg}\n" \
| /usr/sbin/sendmail -F "Webservice Monitor" -f $from_address $_to_address
done
else
echo "" >> $LOCK_DIR/extra_msg.txt
echo -e "\tI have started MARIADB service. The new PID is $NEWPID" >> $LOCK_DIR/extra_msg.txt
echo "" >> $LOCK_DIR/extra_msg.txt
ok "I have started MARIADB service. The new PID is $NEWPID"
fi
if $send_msg ; then
datum=`date +"%d.%m.%Y %H:%Mh"`
subject="Restarting MARIADB on `hostname -f` invoked -- $datum"
msg=`cat $LOCK_DIR/extra_msg.txt`
for _to_address in $to_addresses ; do
echo -e "To:${_to_address}\n${content_type}\nSubject:$subject\n\n${msg}\n" \
| /usr/sbin/sendmail -F "Webservice Monitor" -f $from_address $_to_address
done
fi
}
start_mysql() { start_mysql() {
send_msg=$1 send_msg=$1
@ -1682,6 +1897,20 @@ restart_nginx() {
fi fi
} }
restart_mariadb(){
## - Stop MySQL Service
## -
if stop_mariadb ; then
sleep 2
## - Start MySQL Service
## -
start_mariadb
fi
}
restart_mysql(){ restart_mysql(){
## - Stop MySQL Service ## - Stop MySQL Service
@ -1929,11 +2158,19 @@ EOF
EOF EOF
stop_apache stop_apache
stop_mysql if $check_mysql ; then
stop_mysql
elif $check_mariadb ; then
stop_mariadb
fi
sleep 60 sleep 60
start_mysql if $check_mysql ; then
start_mysql
elif $check_mariadb ; then
start_mariadb
fi
start_apache start_apache
else else
@ -1955,6 +2192,60 @@ EOF
fi # End: check_load fi # End: check_load
#---------------------------------------
#-----------------------------
# Checking MariaDB Database server..
#-----------------------------
#---------------------------------------
if $check_mariadb ; then
echo "" > $LOCK_DIR/extra_msg.txt
if $terminal ; then
echo -e "\nChecking MariaDB databse service on \"`hostname -f`\".."
fi
PID="$(ps aux | grep -E "${MARIADB_PS_CHECK_STRING}" | grep -v grep | awk '{print$2}')"
echo ""
echo "MARIADB_PS_CHECK_STRING: $MARIADB_PS_CHECK_STRING"
echo "PID: $PID"
echo "MYADMIN: $MYADMIN"
echo ""
echo "$MYADMIN $mariadb_credential_args ping 2>/dev/null"
echo ""
if [ "X${PID}X" = "XX" ];then
echo -e "\nMariaDB is not running! - Try to restart service.." >> $LOCK_DIR/extra_msg.txt
echo -e "=================================================" >> $LOCK_DIR/extra_msg.txt
error "MariaDB is not running! - Try to restart it.."
restart_mariadb
else
if [ -z "`$MYADMIN $mariadb_credential_args ping 2>/dev/null`" ]; then
echo -e "\nMariaDB seems to be running, but NOT responding! - Try to restart service.." >> $LOCK_DIR/extra_msg.txt
echo -e "=======================================================================" >> $LOCK_DIR/extra_msg.txt
error "MariaDB seems to be running, but NOT responding! - Try to restart service.."
restart_mariadb
else
if $terminal ; then
ok "MariaDB database service on \"`hostname -f`\" seems to be running.."
fi
fi
fi
fi
#--------------------------------------- #---------------------------------------
#----------------------------- #-----------------------------
# Checking MySQL Database server.. # Checking MySQL Database server..

View File

@ -44,7 +44,8 @@
# - What to check # - What to check
# - # -
check_load=true check_load=true
check_mysql=true check_mysql=false
check_mariadb=false
# - PostgreSQL # - PostgreSQL
# - # -
@ -108,7 +109,7 @@ check_website=false
# - encrypted file. # - encrypted file.
# - # -
# - Create (encrypted) option file: # - Create (encrypted) option file:
# - $ mysql_config_editor set --login-path=local --socket=/run/mysqld/mysqld.sock --user=root --password # - $ mysql_config_editor set --login-path=local --socket=/tmp/mysql.sock --user=root --password
# - $ Password: # - $ Password:
# - # -
# - Use of option file: # - Use of option file:
@ -120,7 +121,42 @@ check_website=false
# - mysql_credential_args="--defaults-file=/etc/mysql/debian.cnf" (Debian default) # - mysql_credential_args="--defaults-file=/etc/mysql/debian.cnf" (Debian default)
# - mysql_credential_args="--defaults-file=/usr/local/mysql/sys-maint.cnf" # - mysql_credential_args="--defaults-file=/usr/local/mysql/sys-maint.cnf"
# - # -
mysql_credential_args="" # - defaults to:
# - mysql_credential_args="--login-path=local"
# -
#mysql_credential_args="--login-path=local"
# - Additional Settings for check_mariadb
# -
# - MariaDB credentials
# -
# - Giving password on command line is insecure an sind mysql 5.5
# - you will get a warning doing so.
# -
# - Reading username/password fro file ist also possible, using MySQL/MariaDB
# - commandline parameter '--defaults-file'.
# -
# - Since Mysql Version 5.6, you can read username/password from
# - encrypted file.
# -
# - Create (encrypted) option file:
# - $ mysql_config_editor set --login-path=local --socket=/tmp/mysql.sock --user=root --password
# - $ Password:
# -
# - Use of option file:
# - $ mysql --login-path=local ...
# -
# - Example
# - mariadb_credential_args="-u root -S /run/mysqld/mysqld.sock"
# - mariadb_credential_args="--login-path=local"
# - mariadb_credential_args="--defaults-file=/etc/mysql/debian.cnf" (Debian default)
# - mariadb_credential_args="--defaults-file=/usr/local/mysql/sys-maint.cnf"
# -
# - defaults to empty string
# - mariadb_credential_args=""
# -
#mariadb_credential_args=""
# - Additional Settings for check_php_fpm # - Additional Settings for check_php_fpm