User Tools

Site Tools


Sidebar


Tags Cloud
apache_checker

Скрипт автоподъема apache

Костыль проверяет количество чайлдов апача, если это количество меньше значения директивы MinSpareServers, то прибивает все процессы вебсервера через kill -9, чистит семафоры и стартует апач. Добавить в крон на каждую минуту.

* * * * * /opt/scripts/apache/apache_checker.sh check
# mkdir /opt/scripts/apache
#!/bin/sh

ALERTEMAIL="[email protected]"
APACHECTL=/usr/sbin/apache2ctl
SCRIPT_DIR=/opt/scripts/apache
RUNNING_PROCESSES=`ps auxww | grep -c bin/apache`;
APACHEUSER="www-data"
MinSpareServers="24"

######## [DO NOT MODIFY] ###

LOG_FILE=${SCRIPT_DIR}/status.log
DATE=`date '+%Y-%m-%d %T'`


apache_start()
{
    $APACHECTL start;
}

apache_stop()
{
    $APACHECTL stop;
    sleep 1;
    killall -9 apache httpd apache2 >/dev/null 2>&1;
}

apache_restart()
{
    apache_stop;
    sleep 1;
    apache_semclear;
    apache_start;
}

# if not running - start
apache_check()
{
    if
        [[ ${RUNNING_PROCESSES} -le $MinSpareServers ]]; then
        apache_restart;
        echo "${DATE} ALERT: `hostname -f` - apache was restarted" >> ${LOG_FILE};
        echo "${DATE} ALERT: `hostname -f` - apache was restarted" | /usr/sbin/sendmail $ALERTEMAIL;
    fi
}

# clear semaphores
apache_semclear()
{
    for i in `ipcs | grep $APACHEUSER | awk -F ' ' '{ print $2}'`
    do
        ipcrm -s $i;
    done
}

case $1 in
    start)
        apache_start;
    ;;
    stop)
        apache_stop;
    ;;
    restart)
        apache_restart;
    ;;
    check)
        apache_check;
    ;;
    semclear)
        apache_semclear;
    ;;
    *)
    echo "Script usage: $0 start | stop | restart | check | semclear";
esac
apache_checker.txt · Last modified: 2013/12/15 17:09 by kyxap