Noticias

No public Twitter messages.

Guía de Backups con Cron Jobs en CPanel

Saludos, hace no mucho mientras realizaba un proyecto para un amigo me comentó que estaba teniendo problemas de seguridad y le comenté que con cron jobs podría dar una fácil solución a las tareas de backup. Personalmente me ahorro mucho tiempo con cron jobs ya que automatizo las tareas de backups y tengo en un host exclusivo todos mis respaldos.

Recuerden no quedarse solo con lo escrito aquí, ésta es una guía muy básica y recomiendo lean todo lo que puedan al respecto. Al final les incluyo algunos links que seguramente les servirán.

 

Planeación

En la elaboración de una serie de tareas, un proyecto o actividad hay algo que siempre hago antes de iniciar. Se trata de un detalle de cosas, cuestiones, soluciones o implementación que yo llamo Planeación. Esto me ha valido ganar tiempo y optimizar mis acciones.

Si usted no lo hace, le invito a que lo intente. Luego cuando no se planean bien las cosas uno termina perdiendo tiempo ajustando o rehaciendo una u otra cuestión.

En este caso necesito una solución para tener un backup listo y actualizado en cualquier momento. Así, si lo necesitara, podría restaurar mi sitio (o sitios) con la mínima perdida de información. Además de tener un respaldo actualizado de mis archivos críticos como parte de esas muchas Buenas Prácticas de seguridad que no deben dejarse de hacer.

Mi sitio está montado sobre wordpress, como bien sabemos wordpress usa un directorio llamado wp-content para almacenar nuestros uploads, themes, plugins y otros, este directorio es el más importante para mi. Los demás directorios podríamos decir que son los que componen el Core (corazón, núcleo) del CMS y son substituibles.

Primero, necesito un backup de Archivos y directorios.

Segundo, necesito un backup de mi base de datos.

No está demás decir que el backup deberá ser un archivo (en el mejor de los casos) comprimido para ahorrar espacio y ganar algunos minutos a la hora de descargar los backups.

Como mi sitio se actualiza una o dos veces por semana no necesito un backup diario, además mis uploads se organizan en carpetas por año y mes. Así quedarán mis tareas:

 

Bakcup de Archivos y directorios:

  • Semestral: Bakcup de todos los archivos y directorios.
  • Mensual: Backup del directorio wp-content
  • Semanal: Backup del directorio wp-content/uploads/2011/11/

Backup de Base de datos:

  • Diaria: Backup de base de datos del sitio web.

Limpieza de Backups viejos:

  • Semanal: Limpieza de backups mensuales, semanales y limpieza de los backups de la base de datos.

Los backups se crearán en un directorio en el root de nuestro hosting.

Directorio de backups:

  • Semestral: /backups/full/
  • Mensual: /backups/mensual/
  • Semanal: /backups/semanal/
  • DB Diaria: /backups/db/

Preparando directorios

Primero voy al administrador de archivos de mi CPanel, creo los directorios y subdirectorios que necesitaré.

En mi caso, crearé en el root de mi host un directorio “backups” y dentro del mismo agregaré los otros directorios y asignaré permisos 755 a cada uno de ellos. Además crearé un directorio llamado “cron” en donde estarán los archivos con las instrucciones de los cron jobs.


 

Creando archivos cron

En este caso usaré 4 archivos con instrucciones, para esto voy a mi administrador de archivos, luego creo mi directorio cron y ahí pondré todos mis archivos.

 

El primer archivo cron: Éste se creará 2 veces por año y constará de un archivo comprimido con mi directorio public_html (en algunos casos es httpdocs o www).

Nombre del archivo: full_backup

Línea de código:

tar czvf /home/tuhost/backups/full/full-backup_$(date +%m-%Y).tgz ./public_html

Para entender a cabalidad el código les recomiendo leer todo lo que puedan acerca de TAR que no es más que una aplicación UNIX. Fragmentando esta línea de código puedo explicarles a grandes rasgos como funciona. Primero llamamos a la aplicación. Segundo definimos la ruta donde estará el backup. Tercero, en la línea de la ruta incluiremos el nombre del archivo con una condicional de tipo Fecha que agregará el mes y año antes de la extensión. Cuarto, definimos el directorio que queremos comprimir.

El segundo archivo cron: Éste será mensual y contendrá toda nuestra carpeta wp-content.

Nombre del archivo: backup_mensual

Línea de código:

tar czvf /home/tuhost/backups/mensual/backup-mensual_$(date +%m-%Y).tgz ./public_html/wp-content

El tercer archivo cron:  Backup semanal, contendrá el directorio con los archivos del mes actual dentro de nuestra carpeta wp-content/uploads.

Nombre del archivo: backup_semanal

Línea de código:

tar czvf /home/tuhost/backups/semanal/backup-semanal_$(date +%d-%m-%Y).tgz ./public_html/wp-content/uploads/2011/11

El cuarto archivo cron: Backup de la base de datos del sitio y se creará todos los días.

Nombre del archivo: db_backup

Línea de código:

mysqldump -uUsuarioDeLaDB -pContraseña nombre_db | gzip > /home/tuhost/backups/db/db_$(date +%d-%m-%Y).gz

Cambiar lo que va luego de -u   -p por el nombre de usuario y contraseña de la base de datos, por último el nombre de la misma.

Archivos de limpieza: Limpieza de archivos antiguos, dos archivos, uno para la limpieza de backups mensuales y otra para los backups semanales y diarios.

Nombre del archivo: clean

Líneas de código:

find /home/tuhost/backups/mensual/ -type f -name ‘*.tgz’ -mtime +30 -exec rm {} \;

find /home/tuhost/backups/semanal/ -type f -name ‘*.tgz’ -mtime +20 -exec rm {} \;

find /home/tuhost/backups/db/ -type f -name ‘*.gz’ -mtime +5 -exec rm {} \;

Aqui les dejo en un comprimido mis archivos cron para que veriquen los códigos 

Creando CronJobs

Vamos a nuestro CPanel, buscamos Cron Jobs e iniciamos a configurar. Aquí escogemos el nivel de Experiencia “Estandar”.

Así accesaremos a todas las opciones del programador.

Aquí configuramos primero el e-mail del cron, esto para que al terminar una tarea nos envía al correo electrónico especificado el resumen, éxito o error de la tarea realizada.

Luego, tenemos una sección bastante amigable para configurar el cron. Primero tenemos un listado de “configuraciones comunes” dentro de estas, tenemos la mayoría de las que utilizamos en este ejemplo.

En el campo “Ejecutar comando” ponemos la ruta del archivo con el comando del cron job, por ejemplo, para el full_backup usamos la siguiente ruta: /home/tuhost/cron/full_backup

 

Listos todos los campos agregamos la tarea y listo, podemos agregar la siguiente hasta tenerlas todas listas. Aqui les dejo unos screenshots que muestran el listado de mis cronjobs.

Teminamos

Como ven, es algo relativamente sencillo y que no requiere una gran cantidad de tiempo o invertir en algún tipo de servicio de backups alternativo.
Los comentarios, dudas, sugerencias o cualquier interacción es bienvenida.

Aqui les dejo algunos links que podrían ayudarlos a expandir sus conocimientos al respecto

 

 

 

 

Mimer - Poeta, alquimista y saltimbanqui en el reino fantástico del Código Libre. Entusiasta de la tecnología en general y amante del desarrollo web sobre wordpress. Epic Design Project Manager mimer@epicdesigngt.com

2 Comments


  1. Marco Avellaneda
    Aug 18, 2012

    Acabo de ver tu articulo y creo que tiene una falla al guardar el archivo semanal, creo que deberia decir /public_html/wp-content/uploads/date +%Y/date +%m, para que guarde automaticamente la carpeta con el mes actual
    Saludos. Muchas gracias por tu articulo.


  2. Alexander
    Aug 09, 2013

    Amigo, excelente tutorial, aunque tengo una pequeña pregunta, que extensión deben llevar los archivos cron o bajo que programa o aplicación deben ser creados, saludos desde Venezuela.

Leave a Reply