Scripting Archive

Backup de Plesk a Amazon Glacier

Con la intención de mejorar la seguridad y la posibilidad de restaurar el servicio ante un posible ataque que pudiera eliminar ficheros de mi servidor, además de realizar un backup diario que se almacena en el propio servidor, he implementado un sistema para exportar el backup que realiza Plesk a Amazon Glacier.

¿Por qué a Amazon Glacier?

En su momento estuve viendo Amazon, pero lo dejé aparcado por pereza. Finalmente esta semana pasada retomé el tema por recomendación de Alberto Larripa.  Es un servicio tremendamente económico, que está pensado para subir ficheros que rara vez van a ser recuperados. Es por eso, que mi política de backups consistirá en dejar en el propio servidor el backup de los últimos 7 días, y el resto ya estarán en Amazon Glacier.

Instalación del cliente AWS

La instalación del cliente es tremendamente sencilla. Una vez más mis agradecimientos a Alberto Larripa que ya lo había instalado y me recomendó este cliente que realmente funciona, y no como otros que había estado probando.

# pip install awscli
# aws configure

Y metemos los parámetros de configuración de nuestra cuenta de Amazon Glacier.

Exportar backup de Plesk

Para exportar un backup de Plesk a un único fichero .tar.gz , a partir del xml generado, podréis encontrar muchísimas páginas que hablan de ello, pero casi ninguna funciona. En unos casos, porque están usando un Plesk bastante viejo. En otros porque lo hacen únicamente para un dominio, y no para todo el backup completo. En cualquier caso, tras varias pruebas, este es el que me funciona a mi:

/usr/local/psa/admin/bin/plesk_agent_manager export-dump-as-file --dump-file-name bck_info_1504110411.xml -v --output-file bck_info_1504110411.xml.tar.gz

Script final que exporta de Plesk y sube a Amazon Glacier

Uniendo todo lo anterior, y obviamente dependiendo de las rutas en las que tengamos Plesk, cómo se llame nuestro Vault en Amazon, etc etc, el script que uso es el siguiente:

#!/bin/bash

# Script para hacer copia del backup de plesk a Amazon Glacier

LOG=/var/lib/psa/dumps/log_backups_amazon_glacier.txt

PLESK_BACKUP_PATH=/var/lib/psa/dumps
cd $PLESK_BACKUP_PATH
LATEST_XML_FILE=$(ls -1tr *.xml | tail -1)
BACKUP_FILE=$PLESK_BACKUP_PATH/$LATEST_XML_FILE.tar.gz

echo "### Construyo fichero de backup ###" >> $LOG
date >> $LOG
/usr/local/psa/admin/bin/plesk_agent_manager export-dump-as-file --dump-file-name $PLESK_BACKUP_PATH/$LATEST_XML_FILE -v --output-file $BACKUP_FILE

echo "### Fichero de backup construido, comenzamos subida a Glacier ###" >> $LOG
date >> $LOG
aws glacier upload-archive --vault-name Backup-Server --account-id - --archive-description $BACKUP_FILE --body $BACKUP_FILE

echo "Archive subido: "$BACKUP_FILE >> $LOG
date >> $LOG

cat $LOG | mail -s "Backup to Amazon Glacier" echebejo@gmail.com

# Elimino ficheros auxiliares
rm $BACKUP_FILE
rm $MAILMSG
echo "" > $LOG

Listado de emails de un fichero

La siguiente línea nos saca un listado de todas las direcciones de email que se encuentren en un fichero. Es muy útil si se trata de un fichero en el que hay más información a parte de la que buscamos:

grep -Eio '([[:alnum:]_.-]+@[[:alnum:]_.-]+?\.[[:alpha:].]{2,6})' fichero.extension

Find + exec, para reemplazar cadenas en ficheros

Pequeño script para Linux que podemos ejecutar en la línea de comandos y que nos permite buscar una cadena y reemplazarla por otra, en múltiples ficheros. Esto es tremendamente útil cuando cambiamos algún nombre, un título de una página html, el nombre de un archivo… y queremos actualizar todos los ficheros que hacen referencia a él. Para ello basta con ejecutar:

find . -type f -exec sed -i s/cadenaVieja/cadenaNueva/g {} \;

Esta línea en concreto buscaría en el directorio actual, y reemplazaría en todos los ficheros las apariciones de cadenaVieja, por cadenaNueva.

Control de memoria RAM consumida por Apache en servidor web

Como bien sabéis estoy teniendo problemas con el servidor y Apache. En ocasiones sin saber muy bien por qué apache crea tantos hijos que sobrecarga el servidor hasta consumir toda la RAM disponible. Cuando llega a ese punto Linux se encarga de matar los procesos menos prioritarios para liberar recursos. En este caso cuando llega ese punto mata todos los procesos apache y el servidor web se cae.

Para tratar de evitar este problema y consultando con google he preparado este script basándome en un artículo que he encontrado en chuano.net.:

Matar a la vez varios procesos con el mismo nombre

En alguna ocasión se me ha presentado la situación de tener que matar varios procesos con el mismo nombre, no siendo ninguno de los procesos el proceso padre. Por tanto si no utilizamos algo similar a lo que propongo, sería necesario ir matando uno por uno, todos los procesos. Esta tarea puede resultar sencilla si tenemos 3 o 4 procesos, pero si tenemos 15 la cosa empieza a ser más complicada. Para solventar esto propongo el siguiente script que he probado y funciona perfectamente:

kill -9 `ps -ef | grep -i nombreproceso | awk {'print $2'}`

Si tenéis alguna otra solución más sencilla no dudéis en poner un comentario. Gracias.