Si tienes un sitio web, una aplicación en un servidor hospedado en la nube o un servidor linux, tu amigo Cron será muy útil a la hora de realizar tareas periódicas programadas. En el caso de un gestor de activos digitales o de cualquier otro sitio web cuyos datos residan en una base de datos, sería muy recomendable hacer una copia de seguridad de forma automática y periodica.
En este tutorial vamos a automatizar algunas de las tareas mas comunes en un servidor web. Ademas, tratándose de ResourceSpace, vamos a automatizar una serie de procesos, unos en forma de scripts PHP y otros en forma de script bash que crearemos para ciertas tareas:
- Volcado y copia de seguridad de la base de datos
- Copia de seguridad de las paginas de aplicación
- Ejecutar el script batch/cron.php de ResourceSpace una vez al día
Para realizar las tareas de copia de seguridad de tu aplicación ResourceSpace, vamos a tener en cuenta la siguiente estrategia: crearemos una copia de seguridad de la base de datos todos los días a las dos de la mañana, de la carpeta con las paginas de la aplicación a otro servidor en la nube.
Volcado y copiado de la base de datos
#!/bin/bash file_name=zd_bck current_time=$(date "+%Y_%m_%d-%H_%M_%S") echo "Current Time : $current_time" new_fileName=$file_name-$current_time.sql echo "New FileName: " "$new_fileName" #cp $file_name $new_fileName #echo "You should see new file generated with timestamp on it.." mysqldump -u usuario bbdd >/home/usuario/bbdd/$new_fileName sshpass -p "password" rsync -a /home/usuario/bbdd usuario@tu.dominio.com:/media/zd_bck/ sshpass -p "password" rsync -a /media/zd_bck/bbdd usuario@tu.dominio.com:/media/zd_bck/
Desgranemos el siguiente script en sus partes:
#!/bin/bash file_name=zd_bck current_time=$(date "+%Y_%m_%d-%H_%M_%S") echo "Current Time : $current_time" new_fileName=$file_name-$current_time.sql echo "New FileName: " "$new_fileName" #cp $file_name $new_fileName #echo "You should see new file generated with timestamp on it.."
Creamos la variable file_name y la igualamos a la cadena zd_bck, que en este caso sería una abreviatura de zonadam_backup. Después creamos la variable current_time y la igualamos a la fecha actual, y creamos una nueva variable, new_fileName en la que concatenamos el valor de las variables $file_name y $current_time, ademas de la extensión .sql, para que genere ficheros en un formato de nombre de fichero similar a éste: zd_bck-2019_10_12-02_00_01.sql
En la siguiente línea:
mysqldump -u usuario bbdd >/home/usuario/bbdd/$new_fileName
ejecutamos el comando mysqldump para hacer un volcado de la base de datos (que en mi ejemplo se llama bbdd) a la ruta del servidor /home/usuario/bbdd y con el nombre de fichero que hemos configurado en las lineas anteriores. Es importante que donde pone ‘usuario‘ vosotros pongáis, en el primer caso, un usuario de mysql que tenga privilegios sobre la base de datos que quieres salvaguardar. Aquí suele funcionar muy bien el mismo usuario que uséis desde ResourceSpace para acceder a la base de datos. Así que esta línea creará en esta ruta de tu servidor /home/usuario/bbdd un fichero -sql similar a este zd_bck-2019_10_12-02_00_01.sql .
La siguiente linea:
sshpass -p "password" rsync -a /home/usuario/bbdd usuario@tu.dominio.com:/media/zd_bck/
utiliza la aplicación sshpass con el parametro -p «password» antes del comando rsync. Esta utilidad sshpass permite definir el password de conexión al servidor remoto que va a recibir la copia de los ficheros. No es la forma más segura de hacer scripts, pero siendo vuestro servidor VPS y teniendo vosotros el acceso al root, ningún otro usuario podrá ver el contenido de estos scripts y funcionan perfectamente para hacer un backup rápido.
El comando rsync -a (modo archivado) copiará la carpeta donde están los volcados de la base de datos al servidor remoto definido en la segunda parte de la sentencia.
Por ultimo, utilizando también rsync precedido de sshpass:
sshpass -p "password" rsync -a /media/zd_bck/bbdd usuario@tu.dominio.com:/media/zd_bck/
Realizamos una segunda copia a otro servidor, en el caso de que dispongáis de uno más. De esta forma, tendríamos dos copias adicionales de la base de datos, que serian un total de tres contando la que ya está funcionando. Estas tres copias estarán guardadas en tres localizaciones diferentes, lo que significa un buen nivel de seguridad para nuestros datos, que son el corazón de nuestro sistema de gestión.
Copiado de la aplicación web a otros servidores
Para realizar la copia de las áaginas de nuestra aplicación, usaremos una sola linea sencilla, que copiara toda la carpeta de la aplicación a dos servidores diferentes, para tener la misma aplicación en tres destinos distintos.
sshpass -p "password" rsync -a /var/www/html/zonadam/ usuario@tu.dominio.com:/media/zd_bck/sites sshpass -p "password" rsync -a /var/www/html/zonadam/ usuario@ip_servidor_destino:/media/zd_bck/sites
Recordareis el uso de sshpass -p «password» que precede a la linea de comando rsync -a y que quiere decir: haz una copia en modo archivo de la carpeta /var/www/html/zonadam/ en la carpeta /media/zd_bck/sites del servidor remoto, «donde pone ip_servidor_destino tienes que poner la ip de tu servidor remoto o su dominio si tuvieses», usando un usuario y una contraseña que puedan conectar por ssh a dicho servidor.
Programando el CRON
Hemos creado unos scripts y ahora tan solo nos queda programar el Cron de nuestro servidor para que estos programas se ejecuten cuando queramos.
0 2 * * * /opt/zd_bbdd_bck.sh 0 0 * * 0 /opt/zd_site_bck.sh
La primera línea indica que todos los días a las 2 de la mañana, se ejecutará el scrip que hace el volcado y la copia de la base de datos. Y la siguiente línea, como el ultimo dígito es un 0, indica que el día 0 = Domingo a las 00:00 de la noche, se copiará la aplicación ejecutando el segundo de los programas.
Programando el script cron de Resourcespace
0 2 * * * /opt/zd_bbdd_bck.sh 0 0 * * 0 /opt/zd_site_bck.sh 0 1 * * * php /var/www/html/zonadam/batch/cron.php
Con esta última línea, ejecutamos mediante php el script cron.php de la carpeta /batch de nuestra instalación ResourceSpace, que a su vez estará ejecutando una serie de scripts internos para muchos procesos.
The system is up-to-date and does not require upgrading. Starting cron process... Executing job: 001_populate_resource_nodes.php - Skipping populate_resource_nodes - already run Executing job: 002_copy_hitcount.php Executing job: 003_send_statistics.php Executing job: 004_send_periodic_reports.php Executing job: 005_geo_set_coords_from_country.php Executing job: 006_update_disk_usage.php Executing job: 007_message_send_unread_emails.php Executing job: 008_offline_jobs.php Executing job: 009_flush_unused_keywords.php - Skipping flush_unused_keywords - already complete Executing job: 010_remove_anonymous_collections.php Executing job: 011_delete_tmp_files.php /var/www/html/trunk/batch/cron_jobs/011_delete_tmp_files.php - deleting director Executing job: 012_disable_inactive_users.php Executing job: 999_file_integrity_check.php
Cada vez que se ejecute ese script, se ejecutaran los que estén en la carpeta /batch/cron_jobs.
Conclusión
Éstas son solo algunas de las tareas que podemos automatizar. Como habéis visto, el tema de los script bash no tiene limite, y podemos programar tanto el volcado de la base de datos como el copiado de ficheros de un servidor a otro, entre otras muchas cosas.
Suscríbete a ZonaDAM y aprende como instalar, configurar y sacar partido a ResourceSpace, una de las herramientas Open Source más potentes que existen. Con tu suscripción mensual en la academia zonadam, tienes la opción de aprender a instalarlo y configurarlo en uno de tus servidores, ya sea físico o virtual, o bien puedes empezar a usar el sistema DAM que se incluye con tu suscripción con un espacio de almacenamiento de 2GB, como alumno de zonadam. Si tienes alguna pregunta, no dudes en ponerte en contacto conmigo.