Canvis

Jump to navigation Jump to search

Backup utilitzant crontab

107 bytes afegits, 09:48, 24 oct 2010
cap resum d'edició
Hoy abordaremos el tema de las copias de seguridad. El objetivo es montar dos tipos de copias, por una parte haremos backups de ficheros y directorios, esto nos permitirá poder restaurar archivos o directorios de manera individual. El otro tipo de copia nos permitirá recuperar nuestro sistema en caso de urgencia.
Backup de directorios y ficheros
Se trata de hacer un backup de todos los archivos de nuestro usuario. A demás, mantendremos un histórico de backups, haremos una copia diaria (lunes, martes, miércoles, etc .), cada lunes machacaremos la copia del lunes anterior y así con todos los días.
El procedimiento es sencillo, elegiremos los directorios y ficheros de los que queremos hacer el backup, y los copiaremos. <pre>cp -rp ~/banyut /media/sdb5/backup/domingo</pre>Es totalmente funcional, pero la verdad es que no es eficiente, el problema está en que cada lunes nos hará una copia completa de todos los archivos que tenemos en el directorio, cuando lo que seria deseable es que solo copiara los modificados o los creados des del último backup.
cp No hay problema, tenemos otra instrucción que nos ofrece esta funcionalidad. <pre>rsync -rp ~altgvbp /home/banyut /media/sdb5/backup/domingo</pre>Hoy no explicaré el comando rsync ni sus opciones, si alguien tiene alguna duda primero que consulte “man rsync” y después que pregunte.
Es totalmente funcionalBueno, pero ya tenemos la verdad instrucción que nos permite poder realizar nuestra copia. El siguiente paso es que no es eficienteestas se realicen de manera automática, el problema está en para ello utilizaremos otra instrucción que cada lunes nos hará una copia completa de todos los archivos que tenemos en ofrece el directorio, cuando lo que seria deseable es que solo copiara los modificados o los creados des del último backupsistema crontab.
No hay problemaCrontab nos permite ejecutar aplicaciones en un momento determinado, tenemos otra instrucción que nos ofrece esta funcionalidaduna única vez o de manera recurrente. En un principio puede parecer algo liosa pero en realidad es muy fácil de usar.
rsync crontab -altgvbp /home/banyut /media/sdb5/backup/domingoe
Hoy no explicaré Esta instrucción nos permite editar el comando rsync ni sus opcionesarchivo /etc/crontab, si alguien tiene alguna duda primero en el que consulte “man rsync” y después programaremos las instrucciones que preguntequeremos ejecutar.
Bueno, ya tenemos la instrucción que nos permite poder realizar nuestra copia. El siguiente paso es que estas se realicen Cada linea de manera automática, para ello utilizaremos otra instrucción que nos ofrece el sistema crontab.este archivo esta formada por 7 columnas <pre>Minutos (de 0 a 59
Crontab nos permite ejecutar aplicaciones en un momento determinado, una única vez o Horas (de manera recurrente. En un principio puede parecer algo liosa pero en realidad es muy fácil de usar.0 a 23)
crontab -eDia (de 1 a 31)
Esta instrucción nos permite editar el archivo /etc/crontab, en el que programaremos las instrucciones que queremos ejecutar.Mes (de 1 a 12)
Cada linea Dia de este archivo esta formada por la semana (de 0 a 7, donde 0 o 7 columnases domingo)
1. Minutos usuario (de 0 a 59opcional) 2.
Horas (de 0 orden a 23)ejecutar</pre> 3Un asterisco en cualquiera de las primeras 5 columnas indica todos, es decir si queremos que algo se ejecute todos los meses en la columna del mes podremos un asterisco.
Dia (de 1 a 31) 4En realidad es un poco mas complejo pero por el momento ya nos vale así.
Mes (de 1 a 12) 5.  Dia de la semana (de 0 a 7, donde 0 o 7 es domingo) 6.  usuario (opcional) 7.  orden a ejecutar Un asterisco en cualquiera de las primeras 5 columnas indica todos, es decir si queremos que algo se ejecute todos los meses en la columna del mes podremos un asterisco. En realidad es un poco mas complejo pero por el momento ya nos vale así. Como funcionan estas columnas.
5 * * * * se ejecutara el minuto 5 de cada hora todos los días.
0 3 * * 6 a las 03:00 horas de todos los sábados
En cada una de estas columnas podemos poner más de un valor, o incluso un rango, esto se hace separando cada valor mediante una coma o un rango mediante un guión.
Así en la columna día de la semana podemos poner 1,3,5 que indicara que se ejecute los lunes, miércoles y viernes. O en la columna mes para indicar la primera quincena podemos poner 1-15.
Esto aún podemos complicarlo un pelín más, tenemos otra operación el símbolo “/”, que indica un incremento, por ejemplo, si en la columna minutos ponemos */15 se ejecutará cada 15 minutos, o si en la columna dias ponemos 1-10/2, se ejecutará los dias 1,3,5,7 y 9.
Por último un ejemplo más complejo.
0 */2 1-15,23,28-31 * 0,6
Se ejecutara cada dos horas los días 1 al 15,el 23, 28, 29, 30 y 31 de todos los meses pero solo cuando sean sábado o domingo.
Ala, como se os ha quedado el cuerpo!!!!
Sabiendo esto, ahora podremos conseguir que nuestros backups se ejecuten de manera automática.
Después de teclear crontab -e añadiremos las siguientes lineas. <pre>0 1 * * 0 instrucción_lunes
0 1 * * 1 instrucción_martes
0 1 * * 5 instrucción_sabado
0 1 * * 6 instrucción_domingo</pre>Con esto conseguiremos que se ejecute cada día a las 01:00 horas las instrucciones indicadas. Podemos substituir “instrucción_******” por la orden rsync arriba descrita.
Con esto conseguiremos que se ejecute De todas formas lo haremos un pelín más completo, crearemos un script para cada día a las 01:00 horas las instrucciones indicadas. Podemos substituir “instrucción_******” por de la orden rsync arriba descritasemana, además recogeremos un log.
De todas formas lo haremos un pelín más completo, crearemos un script para cada día de la semana, además recogeremos un logEmpezaremos creando los directorios necesarios.<pre>mkdir ~/.crono_bak
Empezaremos creando los directorios necesarios. mkdir cd ~/.crono_bak cd ~</.crono_bakpre>Dentro del directorio que acabamos de crear, crearemos siete ficheros mas llamados lunes.sh, martes.sh, ..., domingo.sh y en su interior pondremos lo siguiente. #<pre>!/bin/bash
pathLog="/media/sdb5/backup/logLunes.log"
echo ----------------------------------------------------------------------- >> &gt;&gt; $pathLog echo ---INICI COPIA SEGURETAT LUNES >> $pathLog date >> $pathLog echo ----------------------------------------------------------------------- >> $pathLog echo -- Iniciem Sincronització directori /home/monti >> $pathLog rsync -altgvb /home/monti /media/sdb5/backup/sistema/lunes >> $pathLog echo ----------------------------------------------------------------------- >> $pathLog echo -- Sincronització Finalitzada >> $pathLog date >> $pathLog echo ----------------------------------------------------------------------- >> $pathLog Este código es el que corresponde al script del lunes, para los otros seis haremos lo mismo pero substituyendo Lunes por el día de la semana concreto. El script ejecuta la instrucción rsync, el resto de las lineas lo que hacen es generar un fichero log. Una vez creados los siete ficheros, tendremos que darles permiso para poder ejecutarlos. chmod +x *.sh Para que se ejecute todos los dias a la 1 de la mañana, nuestro crontab quedará así.
# m h dom mon dow commandecho ---INICI COPIA SEGURETAT LUNES &gt;&gt; $pathLog
0 1 * * 1 /home/banyut/.crono_back/lunes.sh >>/media/sdb5/backup/logcrono.logdate &gt;&gt; $pathLog
0 1 * * 2 /home/banyut/.crono_back/martes.sh >>/media/sdb5/backup/logcrono.logecho ----------------------------------------------------------------------- &gt;&gt; $pathLog
0 1 * * 3 echo -- Iniciem Sincronització directori /home/banyut/.crono_back/miercoles.sh >>/media/sdb5/backup/logcrono.logmonti &gt;&gt; $pathLog
0 1 * * 4 rsync -altgvb /home/banyut/.crono_back/jueves.sh >>monti /media/sdb5/backup/logcrono.logsistema/lunes &gt;&gt; $pathLog
0 1 * * 5 /home/banyut/.crono_back/viernes.sh >>/media/sdb5/backup/logcrono.logecho ----------------------------------------------------------------------- &gt;&gt; $pathLog
0 1 * * 6 /home/banyut/.crono_back/sabado.sh >>/media/sdb5/backup/logcrono.logecho -- Sincronització Finalitzada &gt;&gt; $pathLog
0 1 * * 0 /home/banyut/.crono_back/domingo.sh >>/media/sdb5/backup/logcrono.logdate &gt;&gt; $pathLog
Por su puesto, la ruta echo ----------------------------------------------------------------------- &gt;&gt; $pathLog</media/sdb5/backup/sistema/ tiene que existir y en su interior tiene pre>Este código es el que haber 7 directorios llamados corresponde al script del lunes, martes, etcpara los otros seis haremos lo mismo pero substituyendo Lunes por el día de la semana concreto.
buenoEl script ejecuta la instrucción rsync, ya se el resto de las lineas lo que el script hacen es muy mejorable y que se podria haber hecho con generar un solo fichero en vez que con siete, pero creo que para empezar ya esta bien asílog.
Una vez creados los siete ficheros, tendremos que darles permiso para poder ejecutarlos. <pre>chmod +x *.sh</pre>Para poder revisar nuestra programación ejecutaremos:que se ejecute todos los dias a la 1 de la mañana, nuestro crontab quedará así. <pre>m h dom mon dow command
crontab -l0 1 * * 1 /home/banyut/.crono_back/lunes.sh &gt;&gt;/media/sdb5/backup/logcrono.log
He dado por hecho que el demonio cron esta activado, para comprobar esto podemos ejecutar0 1 * * 2 /home/banyut/.crono_back/martes.sh &gt;&gt;/media/sdb5/backup/logcrono.log
ps -ef | grep crontab0 1 * * 3 /home/banyut/.crono_back/miercoles.sh &gt;&gt;/media/sdb5/backup/logcrono.log
En caso que no este en marcha lo iniciaremos de la siguiente forma0 1 * * 4 /home/banyut/.crono_back/jueves.sh &gt;&gt;/media/sdb5/backup/logcrono.log
sudo 0 1 * * 5 /etchome/initbanyut/.crono_back/viernes.dsh &gt;&gt;/cron startmedia/sdb5/backup/logcrono.log
Por último para ver si se ha ejecutado bien podemos mirar el log que hemos creado en 0 1 * * 6 /mediahome/sdb5banyut/backup.crono_back/logcronosabado.log podemos mirar los logs del dia en concreto dentro de la carpeta sh &gt;&gt;/media/sdb5/backup/*****logcrono.log,tambien podemos ver cuando se ha ejecutado nuestro crontab consultando el log del systema.
cat 0 1 * * 0 /varhome/banyut/.crono_back/domingo.sh &gt;&gt;/media/sdb5/backup/logcrono.log</pre>Por su puesto, la ruta /media/sdb5/backup/sistema/syslog |grep crontabtiene que existir y en su interior tiene que haber 7 directorios llamados lunes, martes, etc.
Buenobueno, ya se que el script es muy mejorable y que se podria haber hecho con un solo fichero en vez que con siete, pero creo que para empezar ya esta bien por hoy, mas tarde seguiremos con la segunda parteasí.
Para poder revisar nuestra programación ejecutaremos:
<pre>crontab -l</pre>
He dado por hecho que el demonio cron esta activado, para comprobar esto podemos ejecutar.
<pre>ps -ef | grep crontab</pre>
En caso que no este en marcha lo iniciaremos de la siguiente forma
<pre>sudo /etc/init.d/cron start</pre>
Por último para ver si se ha ejecutado bien podemos mirar el log que hemos creado en /media/sdb5/backup/logcrono.log podemos mirar los logs del dia en concreto dentro de la carpeta /media/sdb5/backup/*****.log,tambien podemos ver cuando se ha ejecutado nuestro crontab consultando el log del systema.
<pre>cat /var/log/syslog |grep crontab</pre>
<br>
<br> font: http://banyut.obolog.com/copias-seguridad-ubuntu-crontab-rsync-dd-65952
3.140
modificacions

Menú de navegació