jueves, 27 de febrero de 2014

Automatizar tareas en nuestro hosting: copias de seguridad de páginas web y gestión de correos

Muchos de nosotros tenemos webs alojadas en servidores y nos gustaría ir haciendo copias de seguridad completas de nuestra web de forma periódica y automáticamente. Hoy les enseño como lo hago yo,  a ver si les resuelve.

1º Creando el script 

Creamos un script con extensión .sh con las instrucciones que necesitaremos hacer. Si necesitan más documentación sería interesante verse por ahí cualquier documentación sobre bin/bash

Por ejemplo este seria mi código para hacer una copia de seguridad de la web yofriki.com en una carpeta FTP (no accesible al público) que se llamará backup. Es importante que la carpeta donde se vaya hacer la copia de seguridad tenga permisos 755, y que el archivo .sh creado tenga permisos 644.



 #!/bin/bash  
 #archivo yofriki_backup.sh  

 #-------------------------------------------------  
 # Inicio copia de seguridad yofriki.com  
 #--------------------------------------------------  

 #borramos todas las copias de seguridad realizadas anteriormente menos las 4 más nuevas  
 cd ~/backup/
 ls ~/backup/ -t | tail -n +4 | xargs rm   

 #volcando la base de datos, sustituir los parámetros en rojo por los tuyos  
 mysqldump -u USUARIO --password=PASSWORD --host=localhost BASE_DE_DATOS | gzip > ~/backup/yofriki_sql.gz  

 #creando paquete con los archivos de la web y el volcado de la base de datos  
 tar czf ~/backup/web_yofriki_$(date +%d-%m-%y).tgz ~/yofriki.com ~/backup/yofriki_sql.gz/  

 #----------Fin del archivo ---------------------------------------  


No solo podemos crear archivos para realizar backups de nuestras webs, sino también para gestionar nuestras cuentas correo. En mi caso, por ejemplo tengo mis correos redireccionado a Gmail, y envío los correos desde gmail utilizando mi propio servidor smtp. Como los correos que recibo en mi servidor se acumulan en mi carpeta de INBOX (bandeja de entrada) me hice un script para vaciar dicha carpeta periódicamente. Para este caso tenemos 2 opciones:

Opción A: en el caso que podamos acceder a la carpeta de correo directamente, podemos eliminar su inbox con un comando semejante a este:

 rm ~/mail/yofriki.com/account/new  

Opcion B: En el caso que no podamos, también podremos hacerlo accediendo por Telnet a nuestro servidor POP para borrar los emails de uno en uno. Para ello recomiendo hacer dos archivos. 1º, el script (empty.sh)para eliminar los correos que sería este, acuerdense de darle permisos 644:

 #!/bin/bash  
 #empty.sh  
 i=1  
 sleep 1  
 echo "user $1"  
 sleep 2  
 echo "pass $2"  
 sleep 2  
 while [ $i -le 200 ]  
      do  
      echo "DELE $i"  
      sleep 0.01       
      i=$(( $i + 1 ))  
 done  
 echo "quit"  

el 2º script será una lista de los emails junto con sus contraseñas a eliminar. Lo podemos llamar lista.sh, cuando programemos el cron, deberías de invocar este archivo. Recuerden que este archivo necesita permisos 644 también!

 #!/bin/bash  
 #archivo lista.sh  
 #personal  
 sh empty.sh nombre_de_usuario contraseña | telnet servidor_pop 110  
 sh empty.sh nombre_de_usuario2 contraseña2 | telnet servidor_pop 110  


2º Programando la tarea Cron

Hay varias formas de hacerlo, según el servidor. Los que tienen Cpanel lo podrán hacer directamente a través del interfaz gráfico, y sino los que puedan acceder a través de SSH podrán configurar la tarea a través de crontabs

Ejemplo comandos Cron:

 curl "http://koko.es/cron.php"   
 /bin/sh ~/respaldo.sh usuario contraseña tu_email@sudominio.com  
 /bin/sh ~/backup/lista.sh tu_email@sudominio.com  

Si lo hacen a través de consola se pueden instalar crontab (los clientes de 1and1 ya lo tendrán instalado) con sudo apt-get install crontab deberás de conectarte al servidor mediante SSH y definir el cronjob manualmente:

 ssh tudominio.com -l tu_usuario_ssh #ej. u265794563  

una vez logeado

 crontab -e  

veras mucho texto comentado, pulsa 'i' para editarlo, y borra todo y añade las tareas cron que quieras

 #copia de seguridad diaria 5:30 am  
 30 5 * * * sh ~/backup/lista.sh  
 #cada 5 mins  
 */5 * * * * sh ~/backup/respaldo.sh  
 #horas 3:30 y 4:30  
 30 4,5 * * * sh ~/backup/backup.sh  
 #horas 3:10, los días 1 y 15 de cada mes.  
 3 10 1,15 * * sh ~/backup/backup.sh  

cuando termines, pulsa ESC,ESC y luego  SHIFT+Z o :wq 

para verificar que se guardo correctamente introduce:

 crontab -l  




1 comentario:

  1. Una información muy interesante y útil. Es fundamental realizar copias de seguridad de toda nuestra información de forma periódica, para garantizar la integridad de la misma en todo momento. Saludos.

    ResponderEliminar

Gracias por frikear con nosotros!