diff --git a/check_webservice_load.sh b/check_webservice_load.sh index 362cf35..abd3bcf 100755 --- a/check_webservice_load.sh +++ b/check_webservice_load.sh @@ -141,12 +141,51 @@ if $check_mysql ; then fi fi - MYSQLD_SAFE=`realpath $(which mysqld_safe) 2>/dev/null` - if [ -z "$MYSQLD_SAFE" ]; then - if [ -x "/usr/local/mysql/bin/mysqld_safe" ]; then - MYSQLD_SAFE=`realpath "/usr/local/mysql/bin/mysqld_safe"` - else - fatal 'Command \"mysqld_safe\" not found!' + MYSQL_INIT_SCRIPT="" + MYSQLD_SERVICE_FILE="" + if $systemd_supported ; then + # - Is Service exclusive controlled by systemd + # - + if systemctl -t service list-unit-files \ + | grep -e "^mysql" \ + | grep -q enabled 2> /devnull ; then + + MYSQLD_SERVICE_FILE=$(systemctl -t service list-unit-files \ + | grep -e "^mysql" \ + | awk '{print$1}') + fi + + fi + + if [[ -z "$MYSQLD_SERVICE_FILE" ]] ; then + if [ -x "$(realpath /etc/init.d/mysql.server)" ]; then + MYSQL_INIT_SCRIPT="/etc/init.d/mysql.server" + elif [ -x "$(realpath /etc/init.d/mysql)" ]; then + MYSQL_INIT_SCRIPT="/etc/init.d/mysql" + fi + fi + + if [[ -z "$MYSQL_INIT_SCRIPT" ]] && [[ -z "$MYSQLD_SERVICE_FILE" ]]; then + fatal 'Neither an init-script nor a service file for MySQL found!' + elif [[ -n "$MYSQL_INIT_SCRIPT" ]] ; then + MYSQL_PS_CHECK_STRING="$(dirname "$MYSQLD")/(mysqld_safe |$(basename "$MYSQLD") )" + #MYSQL_PS_CHECK_STRING="(bin/mysqld_safe |bin/mysqld )" + else + MYSQL_PS_CHECK_STRING="$MYSQLD" + fi + + if [[ -z "$MYSQL_PS_CHECK_STRING" ]]; then + fatal "Cannot determin a check string for output of command 'ps ax'" + fi + + if [[ -n "$MYSQL_INIT_SCRIPT" ]] ; then + MYSQLD_SAFE=`realpath $(which mysqld_safe) 2>/dev/null` + if [ -z "$MYSQLD_SAFE" ]; then + if [ -x "/usr/local/mysql/bin/mysqld_safe" ]; then + MYSQLD_SAFE=`realpath "/usr/local/mysql/bin/mysqld_safe"` + else + fatal 'Command \"mysqld_safe\" not found!' + fi fi fi @@ -159,15 +198,6 @@ if $check_mysql ; then fi fi - MYSQL_INIT_SCRIPT="" - if [ -x "/etc/init.d/mysql.server" ]; then - MYSQL_INIT_SCRIPT="/etc/init.d/mysql.server" - elif [ -x "/etc/init.d/mysql" ]; then - MYSQL_INIT_SCRIPT="/etc/init.d/mysql" - else - fatal 'Cannot find init-script for MySQL server!' - fi - fi if $check_apache ; then @@ -437,14 +467,18 @@ stop_mysql() { ## - Stop MySQL Service ## - - $MYSQL_INIT_SCRIPT stop > /dev/null 2>&1 + if [[ -n "$MYSQL_INIT_SCRIPT" ]]; then + $MYSQL_INIT_SCRIPT stop > /dev/null 2>&1 + else + systemctl stop "$MYSQLD_SERVICE_FILE" > /dev/null 2>&1 + fi _msg=false - sleep 2 + sleep 5 declare -i i=0 - PIDS=$(ps aux | grep "$MYSQLD_SAFE" | grep -v grep | awk '{print$2}') + PIDS="$(ps aux | grep -E "${MYSQL_PS_CHECK_STRING}" | grep -v grep | awk '{print$2}')" while [ "X$PIDS" != "X" ]; do if [ $i -eq 0 ]; then @@ -458,13 +492,13 @@ stop_mysql() { info "Going to kill MySQL Processes (mysqld_safe).." fi - if [ $i -gt 20 ]; then + if [ $i -gt 10 ]; then echo "" >> $LOCK_DIR/extra_msg.txt - echo -e "\t[ Error ]: Killing MySQL Processes (mysqld_safe) failed !!!" >> $LOCK_DIR/extra_msg.txt + echo -e "\t[ Error ]: Killing MySQL Processes failed !!!" >> $LOCK_DIR/extra_msg.txt echo "" >> $LOCK_DIR/extra_msg.txt - error "Killing MySQL Processes (mysqld_safe) failed !!!" + error "Killing MySQL Processes failed !!!" _msg=true @@ -472,52 +506,15 @@ stop_mysql() { fi for _PID in $PIDS ; do - kill -9 $_PID > /dev/null 2>&1 + kill -15 $_PID > /dev/null 2>&1 done - sleep 2 + sleep 5 - PIDS=$(ps aux | grep "$MYSQLD_SAFE" | grep -v grep | awk '{print$2}') + PIDS="$(ps aux | grep -E "${MYSQL_PS_CHECK_STRING}" | grep -v grep | awk '{print$2}')" i=i+1 done - PIDS=$(ps aux | grep "$MYSQLD" | grep -v grep | awk '{print$2}') - declare -i i=0 - while [ "X$PIDS" != "X" ]; do - - if [ $i -eq 0 ]; then - echo "" >> $LOCK_DIR/extra_msg.txt - echo -e "\t[ Error ]: MySQL Processes (mysqld) still exists !!!" >> $LOCK_DIR/extra_msg.txt - echo "" >> $LOCK_DIR/extra_msg.txt - echo -e "\t[ Info ]; Going to kill remaining MySQL Processes (mysqld).." >> $LOCK_DIR/extra_msg.txt - echo "" >> $LOCK_DIR/extra_msg.txt - - error "MySQL Processes (mysqld) still exists !!!" - info "Going to kill remaining MySQL Processes (mysqld).." - fi - - if [ $i -gt 20 ]; then - - echo "" >> $LOCK_DIR/extra_msg.txt - echo -e "\t[ Error ]: Killing remaining MySQL Processes (mysqld) failed !!!" >> $LOCK_DIR/extra_msg.txt - echo "" >> $LOCK_DIR/extra_msg.txt - - error "Killing remaining MySQL Processes (mysqld) failed !!!" - - _msg=true - - break - fi - - for _PID in $PIDS ; do - kill -9 $_PID > /dev/null 2>&1 - done - sleep 2 - PIDS=$(ps aux | grep "$MYSQLD" | grep -v grep | awk '{print$2}') - i=i+1 - - done - if $send_msg && $_msg ; then subject="[ Error ]: Stopping MySQL Engine on `hostname -f` failed -- $datum" msg="\n\n`cat $LOCK_DIR/extra_msg.txt`\n" @@ -651,15 +648,16 @@ start_mysql() { send_msg=$1 send_msg=${send_msg:=true} - $MYSQL_INIT_SCRIPT start > /dev/null 2>&1 - sleep 2 - - NEWPID=$(ps aux | grep "$MYSQLD_SAFE" | grep -v grep | grep root | awk '{print$2}') - - if [[ -z "$NEWPID" ]]; then - NEWPID=$(ps aux | grep "$MYSQLD" | grep -v grep | awk '{print$2}') + if [[ -n "$MYSQL_INIT_SCRIPT" ]]; then + $MYSQL_INIT_SCRIPT start > /dev/null 2>&1 + else + systemctl start "$MYSQLD_SERVICE_FILE" > /dev/null 2>&1 fi + sleep 5 + + NEWPID="$(ps aux | grep -E "${MYSQL_PS_CHECK_STRING}" | grep -v grep | awk '{print$2}' | head -1) " + if [ "X${NEWPID}X" = "XX" ]; then echo "" >> $LOCK_DIR/extra_msg.txt @@ -1086,11 +1084,7 @@ if $check_mysql ; then echo -e "\nChecking Mysql databse service on \"`hostname -f`\".." fi - PID=`ps aux | grep "$MYSQLD_SAFE" | grep -v grep | awk '{print$2}'` - - if [[ -z "$PID" ]] ; then - PID=`ps aux | grep "$MYSQLD" | grep -v grep | awk '{print$2}'` - fi + PID="$(ps aux | grep -E "${MYSQL_PS_CHECK_STRING}" | grep -v grep | awk '{print$2}')" if [ "X${PID}X" = "XX" ];then