File: //usr/local/locaweb/bin/lwcorp_apache2_limites.sh
#!/bin/bash
# VARS e FUNCTIONS
. /etc/lwcorp/lwcorp.functions
CURR_MAXCLIENTS="$(grep MaxClients /etc/apache2/apache2.conf | grep -v ^# | head -n1 | awk '{print$2}')"
CURR_SERVERLIMIT="$(grep ServerLimit /etc/apache2/apache2.conf | grep -v ^# | head -n1 | awk '{print$2}')"
if [ -z $CURR_SERVERLIMIT ]; then
CURR_SERVERLIMIT="256"
fi
if [ -z $CURR_MAXCLIENTS ]; then
CURR_MAXCLIENTS="256"
fi
dialog --backtitle "$LWCORPHEADER" --title "$TITLEINFO" --msgbox "\nINFORMACAO:\n\nPOR PADRAO, AS DIRETIVAS MAXCLIENT E SERVER LIMIT POSSUEM O MESMO VALOR.\n\nAO DEFINIR UM NOVO LIMITE, ESTARA ALTERANDO O VALOR DESSAS DUAS VARIAVEIS." 11 78
#
# ANTES DE MAIS NADA, FAZ UM CONFIGTEST.
#
/usr/sbin/apache2ctl configtest 2> /dev/null
case $? in
0) echo "$LOGDATE - [Exibindo na tela atual limite de conexao (ServerLimit: $CURR_SERVERLIMIT. MaxClients: $CURR_MAXCLIENTS)]" >> $LOGFILE;
dialog --backtitle "$LWCORPHEADER" --title "$TITLECONFIRMACAO" --yesno "\nATENCAO:\n\nATUAL LIMITE DE CONEXOES = $CURR_MAXCLIENTS \n\nDESEJA ALTERAR?\n" 11 65;;
*) echo "$LOGDATE - [Processo cancelado devido a uma falha no Apache2 identificada pelo configtest]" >> $LOGFILE;
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nHA UM PROBLEMA NO CONFIGTEST DO APACHE.\n\nCORRIJA ISSO ANTES DE PROSSEGUIR." 9 65; exit 1;;
esac
case $? in
0) echo "$LOGDATE - [Selecionada opcao para troca do limite de conexoes. Aguardando analista informar novo limite]">> $LOGFILE;
NEW_LIMIT=$(dialog --backtitle "$LWCORPHEADER" --title "LIMITES APACHE2" --stdout --inputbox "\nINFORME O NOVO LIMITE DE CONEXOES NO APACHE2:\n" 10 55) ;;
*) echo "$LOGDATE - [Processo cancelado pelo analista]" >> $LOGFILE;
dialog --backtitle "$LWCORPHEADER" --title "$TITLECANCELADO" --msgbox "\nCONFIGURACAO CANCELADA.\n" 7 65; exit 1;;
esac
if [ $? -eq "0" ];then
if [[ -z $NEW_LIMIT ]]; then
echo "$LOGDATE - [O analista nao informou um novo limite de conexoes.. Abortando.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE DEVE INFORMAR O NOVO LIMIT PARA PROSSEGUIR" 7 53
exit 1
else
echo "$LOGDATE - [Informado novo limite de conexoes: '$NEW_LIMIT'. Aguardando confirmacao do analista para aplicar configuracao e reiniciar o Apache2]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLECONFIRMACAO" --yesno "\nATENCAO:\n\nCOM ESSA MUDANCA VOCE ESTARA ALTERANDO O LIMITE DE CONEXOES DE '$CURR_MAXCLIENTS' para '$NEW_LIMIT'.\n\nOBSERVACAO: AO CONFIRMAR A ALTERACAO, O NOVO LIMITE SERA SETADO E O APACHE2 REINICIADO.\n\nCONFIRMA A ALTERACAO?" 13 98
case $? in
0) echo "$LOGDATE - [Informacao confirmada pelo analista. Iniciando configuracao]" >> $LOGFILE;;
*) echo "$LOGDATE - [Processo cancelado pelo analista]" >> $LOGFILE;
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE CANCELOU O PROCESSO" 7 53;
exit 1;;
esac
fi
elif [ $? -eq "1" ]; then
if [[ -z $NEW_LIMIT ]]; then
echo "$LOGDATE - [O analista cancelou o processo.]" >> $LOGFILE
dialog --backtitle "$LWCORPHEADER" --title "$TITLEERRO" --msgbox "\nVOCE CANCELOU O PROCESSO" 7 53
exit 1
fi
fi
#
# AQUI EH FEITA A ALTERACAO
#
sed -i '/ MaxClients/d' /etc/apache2/apache2.conf
sed -i '/ ServerLimit/d' /etc/apache2/apache2.conf
sed -i "/ MaxRequestsPerChild/{p;s/.*/ MaxClients $NEW_LIMIT/}" /etc/apache2/apache2.conf
sed -i "/ MaxRequestsPerChild/{p;s/.*/ ServerLimit $NEW_LIMIT/}" /etc/apache2/apache2.conf
case $? in
0) echo "$LOGDATE - [Novo limite de conexoes aplicado. Reiniciando o Apache2...]" >> $LOGFILE ;;
*) echo "$LOGDATE - [Erro: Alguma configuracao inconforme impediu a configuracao no Apache2]" >> $LOGFILE;
dialog --backtitle "$LWCORPHEADER" --title "$TITLECANCELADO" --msgbox "\nOCORREU UM ERRO AO SETAR OS NOVOS LIMITES.\n" 7 65; exit 1;;
esac
#
# REINICIANDO O APACHE2:
#
echo -e "\033[1;32mParando o Apache2 educadamente...\033[0m"
/etc/init.d/apache2 stop; sleep 5;
if [ $(ps aux | grep apache2 | grep -v grep) ]; then
echo -e "\033[1;32mMatando processos (rebeldes) que ficaram presos...\033[0m"
kill -9 $(ps aux | grep apache2 | grep -v grep | awk '{print$2}')
fi
echo -e "\033[1;32mSubindo o Apache2 com os novos limites...\033[0m"
/etc/init.d/apache2 start
case $? in
0) echo "$LOGDATE - [Apache2 reiniciado com sucesso]" >> $LOGFILE ;
dialog --backtitle "$LWCORPHEADER" --title "$TITLESUCESSO" --msgbox "\nAPACHE2 REINICIADO E NOVOS LIMITES APLICADOS.\n" 7 50; exit 0;;
*) echo "$LOGDATE - [Ocorreu um erro ao reiniciar o Apache2]" >> $LOGFILE;
dialog --backtitle "$LWCORPHEADER" --title "$TITLECANCELADO" --msgbox "\nOCORREU UM ERRO AO REINICIAR O APACHE2.\n" 7 65; exit 1;;
esac