Script bash para automatizar mediante cron las copias o backups de bases de datos y enviarlas por ftp a otro servidor (Previa solución del problema de caracteres ocultos del script)

Hola amigos, antes de nada voy a explicar un problema que tuve con el script a causa de mi inexperiencia con el mundo Linux y los VPS que espero que sirva para quien le ocurra lo mismo.

El problema fue que una vez tuve el script preparado para realizar las primeras pruebas por el motivo que fuera no funcionaba, tras 2 días perdidos de investigaciones y unos 14 tickets de soporte a mi proveedor VPS en los que solo se limitaban a responderme a cada uno, “que a ellos si les funcionaban sus scripts”, al final se dignaron en investigar porque a mí no me funcionaban siendo el código el mismo que ponían ellos, con lo cual se dieron cuenta que mi script contenía caracteres ocultos que provocaban el fallo del script, ciertamente la respuesta fue escueta pero lo suficiente para poderme encaminar en busca de la solución.

Por lo tanto sabiendo el problema, lo primero que quería saber era cuales eran esos caracteres ocultos, para ello accedí con SSH a la consola mediante putty, me coloque en el directorio donde se encontraba mi script y ejecute el comando “cat -v nombrescript.sh”, el cual me mostro en consola todas las líneas contenidas dentro del script, incluidos los caracteres ocultos.

El carácter oculto era el siguiente “^M”, y se encontraba al final de cada línea o mejor dicho antes de cada salto de carro.

Una vez descubierto el carácter oculto el siguiente paso fue eliminarlo y para ello si disponemos del editor gVim para Windows en el menú editar/opciones de archivo/formato de archivo/ podemos escoger la opción formato unix, con esto solucionamos el problema del carácter de fin de línea o salto de carro que introduce Windows y que no es compatible con sistemas Linux.

Si en vuestro caso tuvierais por ejemplo el Notepad++ la solución también es la misma, os podéis dirigir al menú editar/conversión fin de línea/ y escoger la opción convertir a formato unix y con esto solucionamos el problema con lo que el script correrá sin problemas.

Bien ahora que ya explique la solución al problema de novato que me encontré voy a pasar a postear el código de ejemplo para automatizar los backups y enviarlos a un ftp.

Ahora para ejecutar dicho script manualmente y probarlo podemos acceder mediante putty dirigirnos al directorio donde se encuentre nuestro script y mediante el comando sh nombredelscript.sh ejecutarlo para verificar su funcionamiento. (RECUERDEN DAR PERMISOS DE EJECUCION AL SCRIPT Y DE ESCRITURA A LA CARPETA DONDE SE GUADEN LOS BACKUPS)

Una vez comprobado que funciona correctamente podremos dirigirnos a nuestro panel (En mi caso plesk) y en tareas programadas (crontab) añadir una tarea programada mediante cron.

En mi caso lo quise ejecutar 2 veces cada 24 horas es decir una vez a las 14:00 del medio día y otra a las 2:00 de la noche, por lo que la tarea quedaría tal que así:
0 2,14 * * * cd /var/misscripts/;sh nombredelscript.sh

Como podéis ver en primer lugar mandamos el comando cd para colocarnos en la ruta de nuestro archivo y luego ejecutamos el segundo comando sh para ejecutar nuestro script.

Tambien podríamos usar una ruta como esta: /var/www/vhosts/miusuario.com/httpdocs/scripts/ pero no es recomendable por lo tanto es mejor poner nuestro script en directorios superiores que solo root tenga acceso por ejemplo en /var/misscripts

Bueno y hasta aquí este sencillo script (Recordar el script crea un backup en el servidor y luego lo envía a otro servidor mediante ftp, así que cada vez que se ejecute el script tendréis 2 backups, uno en el servidor principal y otro en el servidor secundario, por lo que tendréis que ir borrando los backups que no os interesen a mano cada cierto tiempo dependiendo del tamaño de las bases de datos y del espacio disponible de cada uno de los servidores.

De todas maneras si buscamos un poco por internet seguro que encontramos algún ejemplo para automatizar también el borrado de backups antiguos pero yo de momento prefiero hacerlo a mano.

Bueno espero que os sirva de ayuda esta entrada y un saludo.