InicioLinuxScripts para mantenimiento (bien de vago)

Scripts para mantenimiento (bien de vago)

Linux•7/13/2011
Hola, quería documentar y compartir con todos un par de scripts que escribí en estos días.
Como no podía ser de otra manera, cada uno está pensado para que haga mi trabajo y que lo haga mejor de lo que yo podría hacerlo.

Uno es para que verifique la temperatura de los discos con hddtemp y me avise cuando superan un primer valor. Cuando se supera el segundo valor, me avisa y apaga el sistema para prevenir la degradación de los mismos.



Otro vuelca todas las bases de datos del servidor MySQL a un archivo comprimido para tener como respaldo.


El que me parece más interesante es el que se encarga de reportar vía email la situación que causa la alerta.

¿Para que uso esto?

Para hacer mantenimiento de un servidor que casi no tiene problemas. De modo que el servidor se revisa a si mismo y me manda un email si encuentra algún inconveniente y actúa en caso de emergencia.
Puntualmente, se trata de un servidor de bases de datos que se encuentra en una oficina. Si bien la información no es super-secreta, esta gente si se preocupa por el caso que le puedan entrar a la oficina y robarles o dañarles el servidor. Vieron que los malhechores siempre están a la vuelta de la esquina. Bien por ellos que me llamaron a mi

Entonces, con una tarea de cron, todos las noches se ejecuta el siguiente script:
mysql-backup.sh dijo:


#!/bin/bash
BACKUPUSER="usuario"
BACKUPDIR="/home/$BACKUPUSER/backup/mysql"
BACKUPDATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUPDIR

mysqldump -u USER -pPASSWD --all-databases | gzip > "$BACKUPDIR/database_$BACKUPDATE.sql.gz"

chown -R $BACKUPUSER:$BACKUPUSER $BACKUPDIR

# Para restaurar:
# mysql -u USER -pPASSWD < backup.sql


Como pueden ver, se establece un usuario local para guardar el backup en su home, se define la carpeta donde serán guardados efectivamente los datos, y se establece la hora del backup para mantener un orden preciso. Luego crea (si es que no existe) la carpeta mencionada y vuelca todas las bases de datos a un archivo comprimido con Gzip en la correspondiente ubicación. Para cerrar, cambia el propietario grupo de los backups. Lo último es necesario porque como preferí que cron ejecute como root estas acciones, luego quedaría todo como propiedad de root, algo indeseable en mi caso. También se documenta como restauran las copias de seguridad, como para tenerlo presente al momento de hacerlo.

Cada 10 minutos, cron me ejecuta el siguiente script para verificar la temperatura de los discos:
(tiene 2 discos SATA de 500 GB en un fakeRAID 1)
hddtemp-check.sh dijo:


#!/bin/bash
TEMPAVISO=40
TEMPAPAGA=55
TEMP1="$(/usr/bin/hddtemp /dev/sda | awk '{print $4}' | awk -F '°' '{print $1}')"
TEMP2="$(/usr/bin/hddtemp /dev/sdb | awk '{print $4}' | awk -F '°' '{print $1}')"

if [ $TEMP1 -le $TEMPAVISO ] ; then
echo "Temperatura normal en SDA"
elif [ $TEMP1 -gt $TEMPAPAGA ] ; then
echo "Temperatura excesiva en SDA"
echo "Apagando el sistema de modo preventivo"
/usr/local/bin/reportar/reportar.sh disk-temperature
/usr/sbin/poweroff --verbose
elif [ $TEMP1 -gt $TEMPAVISO ] ; then
echo "Temperatura sobre lo normal en SDA"
/usr/local/bin/reportar/reportar.sh disk-temperature
fi

if [ $TEMP2 -le $TEMPAVISO ] ; then
echo "Temperatura normal en SDB"
elif [ $TEMP2 -gt $TEMPAPAGA ] ; then
echo "Temperatura excesiva en SDB"
/usr/local/bin/reportar/reportar.sh disk-temperature
echo "Apagando el sistema de modo preventivo"
/usr/sbin/poweroff --verbose
elif [ $TEMP2 -gt $TEMPAVISO ] ; then
echo "Temperatura sobre lo normal en SDB"
/usr/local/bin/reportar/reportar.sh disk-temperature
fi


Como se puede ver arriba, se definen dos temperaturas, una a partir de la cual considero que el disco esta exigido (40ºC), y otra que ya es el límite operacional (55ºC). OjO que hddtemp les de como salida temperaturas en el mismo sistema de unidades!!!
Entonces, compara primero para un disco y después para el segundo la temperatura con las de referencia. Si es menor o igual a 40, esta todo bien. Si está entre 40 y 55, me avisa por correo electrónico (próximo script). Pero, si estamos al horno y algún disco pasa de 55 grados Celcius, me manda el aviso y luego apaga el sistema para prevenir el daño. Simpático, ¿no?

¿Como me manda el mail?

Como dije, otro script.
Este está pensado para que se pueda extender con la cantidad de reportes que sea.
Ya habrán visto de cual se trata, reportar.sh. Al cual se le agrega el nombre del reporte a enviar.
Paso a mostrarles como es:
reportar.sh dijo:


#!/bin/bash
WORKDIR="/usr/local/bin/reportar"
MSGDIR="$WORKDIR/messages"
SENDDATE="$(date '+%X %x')"
# Destinatario del correo
MAILDEST="[email protected]"

# verificar si existe el template
if [ -f $MSGDIR/$1 ]
then
# aviso y envio
echo "Sending $1 report to $MAILDEST"
sh "$MSGDIR/$1" | mutt -s "Servidor EnCuestion $SENDDATE" "$MAILDEST"
exit 0

else
echo "Error de sintaxis, $1 no se encuentra el mensaje"
echo "Mensajes válidos actualmente:"
ls "$MSGDIR"
echo "se encuentran en: $MSGDIR"
exit 1
fi


Pueden ver que no es nada del otro mundo, simplemente trabaja con un directorio donde van otros scripts, uno para cada reporte. Cada uno de dichos scripts tiene por salida el contenido del correo electrónico que se envía con mutt. En el asunto del mismo figura el nombre del servidor, la fecha y la hora. Lo del final es como para saber que reportes se pueden enviar.
Obviamente tenemos que tener configurado mutt de modo que tenga la información del smtp y la cuenta que envía el correo. Eso lo pueden leer del post de skymloder:

Acá van los scripts de reportes que tengo hechos para el caso:
disk-temperature dijo:


#!/bin/bash
echo "Temperatura excesiva en el disco rígido"
echo "Fecha: $(date '+%x')"
echo "Hora: $(date '+%X')"
/usr/local/bin/reportarip.sh
echo "---------------"
echo "Reporte de Temperatura:"
hddtemp /dev/sda
hddtemp /dev/sdb
sensors
echo "---------------"
echo "Fin del reporte"


ven que necesitan tener instalados hddtemp y sensors
y sale como esto:
Reporte Temperatura dijo:


Temperatura excesiva en el disco rígido
Fecha: 13/07/11
Hora: 00:14:15
IP Pública: 186.125.72.214
---------------
Reporte de Temperatura:
/dev/sda: WDC WD5001AALS-00L3B2: 33°C
/dev/sdb: WDC WD5001AALS-00L3B2: 31°C
atk0110-acpi-0
Adapter: ACPI interface
Vcore Voltage: +0.93 V (min = +0.85 V, max = +1.60 V)
+3.3 Voltage: +3.34 V (min = +2.97 V, max = +3.63 V)
+5 Voltage: +5.02 V (min = +4.50 V, max = +5.50 V)
+12 Voltage: +12.10 V (min = +10.20 V, max = +13.80 V)
CPU FAN Speed: 3668 RPM (min = 600 RPM)
CHASSIS FAN Speed: 0 RPM (min = 600 RPM)
POWER FAN Speed: 0 RPM (min = 600 RPM)
CPU Temperature: +28.0°C (high = +60.0°C, crit = +95.0°C)
MB Temperature: +28.0°C (high = +45.0°C, crit = +75.0°C)

---------------
Fin del reporte


Como ven, están fríos por ahora
shutdown dijo:


#!/bin/bash
echo "Apagándose"
echo "Fecha: $(date '+%x')"
echo "Hora: $(date '+%X')"
/usr/local/bin/reportarip.sh
echo "-------------------------------"
cat /etc/motd
echo "-------------------------------"
echo "Fin del aviso"


Tratándose de un Ubuntu Server, el motd tiene información que puede ser de interés, por eso lo incluyo.
Hay otros dos para caso de arranque y reinicio del server que son casi idénticos. Sólo cambian apagado por reinicio o arranque.
El cuerpo del mail es algo así:
Reporte apagado dijo:


Apagándose
Fecha: 13/07/11
Hora: 00:18:16
IP Pública: 8.8.8.8
-------------------------------
Linux saracatunga-server 2.6.32-30-server #59-Ubuntu SMP Tue Mar 1 22:46:09 UTC 2011 x86_64 GNU/Linux
Ubuntu 10.04.2 LTS

System information as of Tue Jul 12 23:35:02 ART 2011

System load: 0.16 Processes: 144
Usage of /: 1.4% of 456.52GB Users logged in: 0
Memory usage: 6% IP address for eth0: 10.0.0.1
Swap usage: 0%

Graph this data and manage this system at https://landscape.canonical.com/

-------------------------------
Fin del aviso



Las partes que dicen reportarip.sh, refieren a otro simple y corto script que me da por salida la ip pública. Este lo busque con google y no me acuerdo de cual de los miles de resultados lo tomé. Ahí va:
reportarip.sh dijo:


#!/bin/bash
IPPUBLICA=$(wget -o /dev/null -O - icanhazip.com)
echo "IP Pública: $IPPUBLICA"


Si bien uso dyndns en el server, nunca está de más tener una segunda opinión

De yapa les paso el muttrc que uso, sin los datos (por supuesto):
.muttrc dijo:


set from = "[email protected]";
set realname = "Server EnCuestion";
set smtp_url = "smtp://[email protected]:587/";
set smtp_pass = "abcd1234";



Espero les haya servido o les sirva en algún momento
Si proponen mejoras, no me ofendo (siempre y cuando se puedan copiar libremente)


Como dijo Rainman: Bah Bye!
Datos archivados del Taringa! original
0puntos
1,029visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
9visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

s
Usuario
Puntos0
Posts37
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.