Dejo este script... su función es simple:
Salvar los logs de navegación y los de autentificación (acceso ssh por ejemplo) de un servidor de mi trabajo. Dejo detalles del mismo, más abajo está el script.
- Un script mediante el cual, salvase los logs de navegación y otros, los comprimiera, los almacenara en una carpeta del HDD y además, lo mandara por SCP hacia otro servidor.
- Este script debía generar logs, mandarlos por email, avisar a los administradores cuando el backup se efectuara y, si había dado error o no (siempre incluir el log).
- Además, como primero copia los logs hacia una carpeta (que luego comprimirá en un .tar.gz), y una vez pasado el paso de copiarlos los vá a borrar, como es así... si se daba el caso que por X problema no pudo copiar los logs, los borrará en el próximo paso. Esto no era aceptable, se debía hacer un ciclo para que compruebe si se efectuó bien la copia, entonces siga, de lo contrario (o sea, si da error) nos mande un email a los admins con el log y no continúe con los próximos pasos.
- También, en el paso de comprimir, se debía hacer un ciclo para comprobar que el .tar.gz se creó sin problemas.
- Y más cosas.
Para los conocedores de esto... el script no está lo más optimizado posible, le faltan varias cosas que aún no se le han agregado, etc etc... estoy trabajando en eso. Cualquier crítica constructiva, sugerencia, idea, duda o pregunta, es bien recibida.
Ahora sí el script:
Código: Seleccionar todo
#!/bin/sh
#
# -*- ENCODING: UTF-8 -*-
#
# Script para backup de Logs
#
# Este script es software libre. Puede redistribuirlo y/o
# modificarlo bajo los términos de la Licencia Pública General
# de GNU según es publicada por la Free Software Foundation,
# bien de la versión 2 de dicha Licencia o bien (según su
# elección) de cualquier versión posterior.
#
# Cualquier cambio hecho en el script, debe dejarse bien claro,
# de forma tal que no pueda perjudicar de ninguna forma la
# imagen o reputación del autor original.
# Si se toma parte de este script para crear otro, se debe
# reconocer en todos los casos o dejar referencia al autor de
# este script
#
#
# Copyleft 2010, Instituto Politécnico de Informática Raúl Cepero Bonilla. Ciudad Habana, Cuba.
# Autores: KZKG^Gaara <kzkggaara.mcanime@gmail.com> <http://kzkggaara.wordpress.com>
# Ernesto Luis Acosta <elavdeveloper@gmail.com> <http://elavdeveloper.wordpress.com>
#
NAME="Virtue_Backup-Script_Logs" # Nombre del script.
VERSION=0.1 # Versión del script.
#Descripción: Script mediante el cual se salvan los logs #
# del servidor Virtue (192.168.200.3). #
# Este script depende de "tar" y "postfix", así como #
# una adecuada configuración para SSH/SCP sin #
# autentificación. #
: ${DATE:=$(date +'%Y-%m-%d')} # Fecha.
: ${TIME:=$(date +'%r')} # Hora.
: ${SERVER_DIR:=/home/backups/Servers/Virtue} # Directorio donde se almacenan salvas del servidor.
: ${WORK_DIR:=/home/backups/Servers/Virtue/$DATE.logs/} # Directorio de Trabajo.
: ${WORK_CREATE:=/home/backups/Servers/Virtue/$DATE.logs/1} # Variable para crear el directorio de trabajo si no existe.
: ${LOG_FILE:=/home/backups/Servers/Virtue/record.log} # Archivo de Log.
: ${LOG_FILE2:=/home/backups/Servers/Virtue/record2.log} # Archivo de Log2.
: ${CONTROL1:=0} # Variable para Ciclo Condicional No.1 (CP).
: ${CONTROL2:=0} # Variable para Ciclo Condicional No.2 (TAR.GZ).
: ${ADMIN1:=kzkggaara@ipichcb.rimed.cu} # Email de Administrador No.1
: ${ADMIN2:=elav@ipichcb.rimed.cu} # Email de Administrador No.2
# Limpiando los logs de salva anterior.
rm $LOG_FILE
rm $LOG_FILE2
touch $LOG_FILE
touch $LOG_FILE2
# Creando directorio donde se trabajará, si es que no existe.
if [ ! -d "`dirname $WORK_CREATE`" ] ; then mkdir -p "`dirname $WORK_CREATE`"; fi
# Cambiando a directorio donde trabajaremos.
cd $WORK_DIR
# Deteniendo SQUID.
/etc/init.d/squid stop
#####_Empezando ciclo para salva y posterior eliminación de logs_#####
while [ $CONTROL1=0 ] ; do
# Copiando logs de SQUID hacia directorio de trabajo actual.
cp -v /var/log/squid/access.* $WORK_DIR >> $LOG_FILE 2>&1
if [ $? -ne 0 ]; then
CONTADOR=0
echo ERROR !!!. Cerrando Script y notificando a los administradores.
# Imprimiendo en BODY.TXT fecha y hora actual, así como el log de error.
echo "La salva de logs del servidor Virtue (192.168.200.3) ha dado ERROR, se adjunta log. Esto ha ocurrido hoy, "$DATE "a las" $TIME > $SERVER_DIR/body.txt
cat $LOG_FILE >> $SERVER_DIR/body.txt
# Enviando emails a administradores con notificación de error y log del mismo.
mail -s "[Virtue] | [ERROR] Status de salva de logs." $ADMIN1 < $SERVER_DIR/body.txt
mail -s "[Virtue] | [ERROR] Status de salva de logs." $ADMIN2 < $SERVER_DIR/body.txt
exit
else
CONTADOR=1
# Copiando logs de autentificación hacia directorio de trabajo actual.
cp -v /var/log/auth.* $WORK_DIR >> $LOG_FILE 2>&1
# Borrando logs ya copiados.
rm -v /var/log/squid/access.* >> $LOG_FILE 2>&1
rm -v /var/log/auth.* >> $LOG_FILE 2>&1
# Iniciando SQUID.
/etc/init.d/squid start
# Creando manualmente log de autentificación.
touch /var/log/auth.log
chgrp adm /var/log/auth.log
chmod 640 /var/log/auth.log
# Copiando archivo RECORD.LOG hacia directorio de trabajo.
cp $LOG_FILE $WORK_DIR
# Saliendo un nivel más arriba (/home/backups/Servers/Virtue/).
cd ..
# ------------------------------------------------------------------------
#####_Empezando ciclo para compresión y posterior eliminación del directorio de trabajo (WORK_DIR)_#####
while [ $CONTROL2=0 ] ; do
# Comprimiendo directorio de trabajo actual.
tar czvf "$DATE.logs.tar.gz" "$DATE.logs" >> $LOG_FILE2 2>&1
if [ $? -ne 0 ]; then
CONTADOR=0
echo ERROR !!!. Cerrando Script y notificando a los administradores.
# Imprimiendo en BODY.TXT fecha y hora actual, así como el log de error.
echo "La salva de logs del servidor Virtue (192.168.200.3) ha dado ERROR. Especificamente a la hora de COMPRIMIR el directorio, se adjunta log. Esto ha ocurrido hoy, "$DATE "a las" $TIME > $SERVER_DIR/body.txt
cat $LOG_FILE >> $SERVER_DIR/body.txt
cat $LOG_FILE2 >> $SERVER_DIR/body.txt
# Enviando emails a administradores con notificación de error y log del mismo.
mail -s "[Virtue] | [ERROR] Status de salva de logs." $ADMIN1 < $SERVER_DIR/body.txt
mail -s "[Virtue] | [ERROR] Status de salva de logs." $ADMIN2 < $SERVER_DIR/body.txt
exit
else
CONTADOR=1
# Eliminando directorio una vez comprimido.
rm -R "$WORK_DIR"
# Enviando por SCP archivo .TAR.GZ al servidor principal de salvas Freedom (192.168.200.4).
scp -v "/home/backups/Servers/Virtue/$DATE.logs.tar.gz" root@192.168.200.4:/home/backups/Servers/Virtue/ >> $LOG_FILE 2>&1
# Enviando emails a administradores informando que la salva se efectuó correctamente.
echo "La salva de logs del servidor Virtue (192.168.200.3) se ha efectuado satisfactoriamente. Hoy, "$DATE "a las" $TIME > $SERVER_DIR/body.txt
cat $LOG_FILE >> $SERVER_DIR/body.txt
mail -s "[Virtue] | [OK] Status de salva de logs." $ADMIN1 < $SERVER_DIR/body.txt
mail -s "[Virtue] | [OK] Status de salva de logs." $ADMIN2 < $SERVER_DIR/body.txt
# Eliminando y creando el archivo body.txt
rm $SERVER_DIR/body.txt
touch $SERVER_DIR/body.txt
###_Finalizando y cerrando ciclo referente a TAR.GZ_###
exit
fi
done
# ------------------------------------------------------------------------
###_Finalizando y cerrando ciclo referente a CP_###
exit
fi
done
# Fin del script.
exit 0