LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado
 

En este artículo te vamos a mostrar 5 shell scripts que te ayudarán a proteger tu servidor, este artículo debes unirlo a estos otros, que siempre te resultarán de lo más interesante.

Empezaremos por el archivo de configuración, al que llamaremos "reiniciaservicios.conf" y lo vamos a colocar el en directorio /root/bin, si no  tienes creado todavía el directorio, créalo. Además, todos los scripts expuestos en este artículo, deberán estar dentro del mencionado directorio.

 Debemos informar que estos scripts se presentan sin garantía, tal vez necesiten algunas modificaciones propias de su servidor y distribución Linux. Su incorrecta disposición puede hacer que el servidor quede sin servicios, si no está acostumbrado a manejar este tipo de scripts, hágase acompañar de un experto o bien pida los servicios de un profesional. Puede solicitar nuestros servicios profesionales en ExtreHost para que le configuremos el servidor para cualquier cosa que necesite. por un módico precio.

La variable B, contiene la carga máxima que le vamos a permitir al servidor, donde empiezan a fallar los servicios, que se extrae del comando 'uptime', debes asignarle un valor entre 2.45 y 3.45 (para este ejemplo)


# Reinicia Servicios configuración.
# B indica la máxima carga 
B=3.45
# Indica la ruta del archivo de registros
REGISTROSLOGS="/root/mislogs.log"

 Este es el script principal, cuando la carga máxima llega o supera a B, se ejecutará este script, al cual llamaremos desde un script llamado "cargatrabajo.sh" que veremos más adelante.

Nombre del script: reiniciaservicios.sh

 

#!/bin/bash

load_conf()
{
        CONF="/root/bin/reiniciaservicios.conf"
        if [ -f "$CONF" ] && [ ! "$CONF" ==  "" ]; then
                source $CONF
        else
                head
                echo "\$CONF not found."
                exit 1
        fi
}

load_conf

# Comprobar que el campo "uptime" a leer, es el correcto
A=`uptime | awk '{print $10}' | cut -d, -f1`
if [ `expr $A : '[0-9].[0-9]*'` -eq ${#A} ] ; then
   echo " "
else 
    A=`uptime | awk '{print $11}' | cut -d, -f1`
fi

PARAR=1         # Bandera del bucle
UNAVEZ=1        # Bandera del buble


while [[ $( echo "$A > $B" | bc ) -eq 1 ]]; do

  if [ $PARAR -eq 1 ] ; then
     
     if [ $UNAVEZ -eq 1 ] ; then
        /sbin/service httpd stop        >> $REGISTROSLOGS
        printf "\n"                     >> $REGISTROSLOGS
        /sbin/service mysqld stop       >> $REGISTROSLOGS
        printf "\n"                     >> $REGISTROSLOGS
        sleep 3
     fi
     UNAVEZ=0   # Ya no leera "if" durante el bucle
  fi
  PARAR=0       # Ya no leera "if" durante el bucle

 A=`uptime | awk '{print $10}' | cut -d, -f1`

 if [ `expr $A : '[0-9].[0-9]*'` -eq ${#A} ] ; then
   source $CONF
 else
    A=`uptime | awk '{print $11}' | cut -d, -f1`
 fi
 sleep 2

done


if [ $PARAR -eq 0 ] ; then
    sleep 3
    /sbin/service mysqld start  >> $REGISTROSLOGS
    printf "\n"                 >> $REGISTROSLOGS
    /sbin/service httpd start   >> $REGISTROSLOGS
    printf "\n"                 >> $REGISTROSLOGS   
fi

Este script, debes incluirlo en tu crond, puedes incluirlo en /etc/cron.d/ creando un fichero llamado "cargatrabajo.cron" e incluir:

0-59/1 * * * * root /root/bin/cargatrabajo.sh

O si lo ingresas en crontab con "crontab -e" haz la entrada que tenga:

0-59/1 * * * * /root/bin/cargatrabajo.sh

Este sería: cargatrabajo.sh

 

#!/bin/sh
# El script debe insertarse en el crontab de root y debe
# copiarse en el directorio /root/bin, cree la entrada
# escribiendo "crontab -e" e inserte:
# --------------------------------------------------
# 
# 0-59/1 * * * *         /root/bin/cargatrabajo.sh >/dev/null 2>&1
# ---------------------------------------------------

load_conf()
{
        CONF="/root/bin/reiniciaservicios.conf"
        if [ -f "$CONF" ] && [ ! "$CONF" ==  "" ]; then
                source $CONF
        else
                head
                echo "\$CONF not found."
                exit 1
        fi
}

load_conf

TMP_PREFIX='/tmp/cargatrabaj'
TMP_FILE="mktemp $TMP_PREFIX.XXXXXXXX"

FINMSG=0
A=`uptime | awk '{print $10}' | cut -d, -f1`
if [ `expr $A : '[0-9].[0-9]*'` -eq ${#A} ] ; then
  source $CONF
else 
  A=`uptime | awk '{print $11}' | cut -d, -f1`
fi


echo "¿ $A > $B ?"
if [ $( echo "$A > $B" | bc ) -eq 1 ]; then
        FINMSG=1
        echo "=============================="                   >> $REGISTROSLOGS
        echo "START: $A > $B - `date` - `uptime` - `hostname`"  >> $REGISTROSLOGS
        echo "`/root/bin/conexiones.sh`"                        >> $REGISTROSLOGS
        echo "=============================="                   >> $REGISTROSLOGS
        /root/bin/reiniciaservicios.sh ; sleep 3
        /root/bin/cargatrabajo.sh
fi

if [ $FINMSG -eq 1 ] ; then
        printf "\n"                                             >> $REGISTROSLOGS
        echo "END: $A > $B - `date` - `uptime` - `hostname`"    >> $REGISTROSLOGS
        FINMSG=0
fi


rm -fv $TMP_PREFIX.*

Este script, sólo sirve para vigilar las conexiones

vivoconexiones.sh

 

for i in {1..20}; do 
        clear; conexiones.sh ; date; diskmax.sh; sleep 3; 
        clear; conexiones.sh ; date; diskmax.sh; sleep 3; 
        clear; conexiones.sh ; date; diskmax.sh; sleep 3; 
        clear; conexiones.sh ; date; diskmax.sh; sleep 3;
done
echo "20 loops terminados. Vuela a arrancar: $_ "

 

El script anterior está basado en este, al que llamaremos:

conexiones.sh


netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n | tail 
NumConex=`netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | sort -nr | uniq -c | awk '{sum+=$1} END {print sum}'`

A=`uptime | awk '{print $10}' | cut -d, -f1`
if [ `expr $A : '[0-9].[0-9]*'` -eq ${#A} ] ; then
  echo "Number";
else
    A=`uptime | awk '{print $11}' | cut -d, -f1`
fi
    
echo "$NumConex conexiones, -> carga trabajo: $A"

Script que comprueba que no estén todos los inodos del disco duro completos, puedes hacer una versión modificada de este script, para simplemente, comprobar que no esté lleno.

A este script le llamaremos: diskmax.sh


#!/bin/sh
# El script debe insertarse en el crontab de root y debe
# copiarse en el directorio /root/bin, cree la entrada    
# escribiendo "crontab -e" e inserte:
# --------------------------------------------------
# 0-59/1 * * * *         /root/bin/diskmax.sh >/dev/null 2>&1
# ---------------------------------------------------
MAX=85

PART=sda1
USE=`df -ih |grep $PART | awk '{ print $5 }' | cut -d'%' -f1 | uniq -c | awk '{ print $2 }'`
echo "¿ $USE > $MAX ?"
if [ $USE -gt $MAX ]; then
  #  echo "Percent used: $USE" 
  #  echo "Superado: $MAX"
  /root/bin/optimiza.sh ; /root/bin/reiniciaservicios.sh
fi

 

Puede contratar ExtreHost para temas profesionales con sus servidores. No lo dude, contáctenos.

Pin It

Escribir un comentario


Código de seguridad
Refescar