Obre el menú principal

Diferència entre revisions de la pàgina «Backup utilitzant crontab»

m (Utilitzant crontab s'ha reanomenat com Backup utilitzant crontab: El títol siga més clar)
 
(34 revisions intermèdies per 4 usuaris que no es mostren)
Línia 1: Línia 1:
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.
+
L’objectiu d'aquest article és muntar backups de fitxers i directoris automàtics.  
  
Backup de directorios y ficheros
+
=== Backup de directoris i fitxers  ===
  
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.
+
<br>Es tracta de fer un backup de tots els arxius del nostre usuari. Mantindrem un històric de backups, farem una còpia diària (dilluns, dimarts, dimecres, etc .), cada dilluns substituirem la còpia del dilluns anterior i així amb tots els dies.  
  
El procedimiento es sencillo, elegiremos los directorios y ficheros de los que queremos hacer el backup, y los copiaremos.
+
<br>El procediment és senzill, triarem els directoris i fitxers de què volem fer el backup, i els copiarem.<br>
 +
<pre>cp -rp ~/banyut /media/sdb5/backup/domingo</pre>
 +
<br> És totalment funcional, però la veritat és que no és eficient, el problema està en que cada dilluns ens farà una còpia completa de tots els arxius que tenim en el directori, quan el que seria desitjable és que només copiara els modificats o els creats des de l’últim backup.  
  
cp -rp ~/banyut /media/sdb5/backup/domingo
+
<br>No hi ha problema, tenim una altra instrucció que ens oferix esta funcionalitat.<br>
 +
<pre>rsync -altgvbp /home/banyut /media/sdb5/backup/domingo</pre>
 +
<br> El següent pas és que estes es realitzen de manera automàtica, per a això utilitzarem una altra instrucció que ens oferix el sistema crontab.<br>Crontab ens permet executar aplicacions en un moment determinat, una única vegada o de manera recurrent. En un principi pot paréixer quelcom embolicadora però en realitat és molt fàcil d’usar.
 +
<pre>crontab -e</pre>
 +
<br> Esta instrucció ens permet editar l’arxiu /etc/crontab, en el que programarem les instruccions que volem executar.<br>Cada esbossa d’este arxiu esta formada per 7 columnes<br>
 +
<pre>Minutos (de 0 a 59
  
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.
+
Horas (de 0 a 23)
  
No hay problema, tenemos otra instrucción que nos ofrece esta funcionalidad.
+
Dia (de 1 a 31)
  
rsync -altgvbp /home/banyut /media/sdb5/backup/domingo
+
Mes (de 1 a 12)
  
Hoy no explicaré el comando rsync ni sus opciones, si alguien tiene alguna duda primero que consulte “man rsync” y después que pregunte.
+
Dia de la semana (de 0 a 7, donde 0 o 7 es domingo)
  
Bueno, ya tenemos la instrucción que nos permite poder realizar nuestra copia. El siguiente paso es que estas se realicen de manera automática, para ello utilizaremos otra instrucción que nos ofrece el sistema crontab.
+
usuario (opcional)
  
Crontab nos permite ejecutar aplicaciones en un momento determinado, una única vez o de manera recurrente. En un principio puede parecer algo liosa pero en realidad es muy fácil de usar.
+
orden a ejecutar</pre>
 
+
<br> Un asterisc en qualsevol de les primeres 5 columnes indica tots, és a dir si volem que quelcom s’execute tots els mesos en la columna del mes podrem un asterisc.<br>En realitat és un poc mas complex però de moment ja ens val així.<br>Com funcionen estes columnes.<br>
crontab -e
 
 
 
Esta instrucción nos permite editar el archivo /etc/crontab, en el que programaremos las instrucciones que queremos ejecutar.
 
 
 
Cada linea de este archivo esta formada por 7 columnas
 
 
 
  1. Minutos (de 0 a 59)
 
  2.
 
 
 
      Horas (de 0 a 23)
 
  3.
 
 
 
      Dia (de 1 a 31)
 
  4.
 
 
 
      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.
 
       5 * * * * se ejecutara el minuto 5 de cada hora todos los días.
Línia 65: Línia 41:
 
       0 3 * * 6 a las 03:00 horas de todos los sábados
 
       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.
+
<br>
 
 
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
+
En cada una d’estes columnes podem posar més d’un valor, o inclús un rang, açò es fa separant cada valor per mitjà d’una coma o un rang per mitjà d’un guió.<br>Així en la columna dia de la setmana podem posar 1,3,5 que indicara que s’execute els dilluns, dimecres i divendres. O en la columna mes per a indicar la primera quinzena podem posar 1-15.<br>Açò encara podem complicar-ho un pèl més, tenim una altra operació el símbol “/”, que indica un increment, per exemple, si en la columna minuts posem */15 s’executarà cada 15 minuts, o si en la columna dies posem 1-10/2, s’executarà els dies 1,3,5,7 i 9.<br>
  
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.
+
Finalment un exemple més complex.<br>
  
Ala, como se os ha quedado el cuerpo!!!!
+
      0 */2 1-15,23,28-31 * 0,6 S’executara cada dos hores els dies 1 al 15,el 23, 28, 29, 30 i 31 de tots els mesos però només quan siguen dissabte o diumenge.
  
Sabiendo esto, ahora podremos conseguir que nuestros backups se ejecuten de manera automática.
+
[[Category:GNU/Linux]][[Category:Crontab]][[Category:Backup]]
  
Después de teclear crontab -e añadiremos las siguientes lineas.
+
<br>
  
0 1 * * 0 instrucción_lunes
+
Sabent açò, ara podrem aconseguir que els nostres backups s’executen de manera automàtica.<br>Després de teclejar crontab -e afegirem les següents esbosses.<br>
 +
<pre>0 1 * * 0 instrucción_lunes
  
 
0 1 * * 1 instrucción_martes
 
0 1 * * 1 instrucción_martes
Línia 95: Línia 66:
 
0 1 * * 5 instrucción_sabado
 
0 1 * * 5 instrucción_sabado
  
0 1 * * 6 instrucción_domingo
+
0 1 * * 6 instrucción_domingo</pre>
 
+
<br> Amb açò aconseguirem que s’execute cada dia a les 01:00 hores les instruccions indicades. Podem substituir “instrucció_******” per l’orde rsync dalt descrita.<br>De totes maneres ho farem un pèl més complet, crearem un script per a cada dia de la setmana, a més arreplegarem un log.<br>Començarem creant els directoris necessaris.<br>
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.
+
<pre>mkdir ~/.crono_bak
 
 
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 log.
 
 
 
Empezaremos creando los directorios necesarios.
 
 
 
mkdir ~/.crono_bak
 
 
 
cd ~/.crono_bak
 
  
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.
+
cd ~/.crono_bak</pre>
 
+
Dins del directori que acabem de crear, crearem set fitxers mes cridats lunes.sh, martes.sh, ..., domingo.sh i en el seu interior posarem el següent.  
#!/bin/bash
+
<pre>!/bin/bash
  
 
pathLog="/media/sdb5/backup/logLunes.log"
 
pathLog="/media/sdb5/backup/logLunes.log"
  
echo ----------------------------------------------------------------------- >> $pathLog
+
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 command
 
 
 
0 1 * * 1 /home/banyut/.crono_back/lunes.sh >>/media/sdb5/backup/logcrono.log
 
 
 
0 1 * * 2 /home/banyut/.crono_back/martes.sh >>/media/sdb5/backup/logcrono.log
 
 
 
0 1 * * 3 /home/banyut/.crono_back/miercoles.sh >>/media/sdb5/backup/logcrono.log
 
  
0 1 * * 4 /home/banyut/.crono_back/jueves.sh >>/media/sdb5/backup/logcrono.log
+
echo ---INICI COPIA SEGURETAT LUNES &gt;&gt; $pathLog
  
0 1 * * 5 /home/banyut/.crono_back/viernes.sh >>/media/sdb5/backup/logcrono.log
+
date &gt;&gt; $pathLog
  
0 1 * * 6 /home/banyut/.crono_back/sabado.sh >>/media/sdb5/backup/logcrono.log
+
echo ----------------------------------------------------------------------- &gt;&gt; $pathLog
  
0 1 * * 0 /home/banyut/.crono_back/domingo.sh >>/media/sdb5/backup/logcrono.log
+
echo -- Iniciem Sincronització directori /home/monti &gt;&gt; $pathLog
  
Por su puesto, la ruta /media/sdb5/backup/sistema/ tiene que existir y en su interior tiene que haber 7 directorios llamados lunes, martes, etc.
+
rsync -altgvb /home/monti /media/sdb5/backup/sistema/lunes &gt;&gt; $pathLog
  
bueno, 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 así.
+
echo ----------------------------------------------------------------------- &gt;&gt; $pathLog
  
Para poder revisar nuestra programación ejecutaremos:
+
echo -- Sincronització Finalitzada &gt;&gt; $pathLog
  
crontab -l
+
date &gt;&gt; $pathLog
  
He dado por hecho que el demonio cron esta activado, para comprobar esto podemos ejecutar.
+
echo ----------------------------------------------------------------------- &gt;&gt; $pathLog</pre>
 +
<br> Este codi és el que correspon al script del dilluns, per als altres sis farem el mateix però substituint Dilluns pel dia de la setmana concret.<br>El script executa la instrucció rsync, la resta de les esbosses el que fan és generar un fitxer log.<br>Una vegada creats els set fitxers, haurem de donar-los permís per a poder executar-los.<br>
 +
<pre>chmod +x *.sh</pre>
 +
Perquè s’execute tots els dies a l’1 del matí, el nostre crontab quedarà així.  
 +
<pre>m h dom mon dow command
  
ps -ef | grep crontab
+
0 1 * * 1 /home/banyut/.crono_back/lunes.sh &gt;&gt;/media/sdb5/backup/logcrono.log
  
En caso que no este en marcha lo iniciaremos de la siguiente forma
+
0 1 * * 2 /home/banyut/.crono_back/martes.sh &gt;&gt;/media/sdb5/backup/logcrono.log
  
sudo /etc/init.d/cron start
+
0 1 * * 3 /home/banyut/.crono_back/miercoles.sh &gt;&gt;/media/sdb5/backup/logcrono.log
  
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.
+
0 1 * * 4 /home/banyut/.crono_back/jueves.sh &gt;&gt;/media/sdb5/backup/logcrono.log
  
cat /var/log/syslog |grep crontab
+
0 1 * * 5 /home/banyut/.crono_back/viernes.sh &gt;&gt;/media/sdb5/backup/logcrono.log
  
Bueno, ya esta bien por hoy, mas tarde seguiremos con la segunda parte.
+
0 1 * * 6 /home/banyut/.crono_back/sabado.sh &gt;&gt;/media/sdb5/backup/logcrono.log
  
 +
0 1 * * 0 /home/banyut/.crono_back/domingo.sh &gt;&gt;/media/sdb5/backup/logcrono.log</pre>
 +
<br> La ruta /mitjana/sdb5/backup/sistema/ ha d’existir i en el seu interior ha d’haver-hi 7 directoris cridats dilluns, dimarts, etc.<br>Per a poder revisar la nostra programació executarem:<br>
 +
<pre>crontab -l</pre>
 +
He donat per fet que el dimoni cron esta activat, per a comprovar açò podem executar.
 +
<pre>ps -ef | grep crontab</pre>
 +
En cas que no este en marxa ho iniciarem de la manera següent
 +
<pre>sudo /etc/init.d/cron start</pre>
 +
Finalment per a veure si s’ha executat bé podem mirar el log que hem creat en /mitja/sdb5/backup/logcrono.log podem mirar els logs del dia en concret dins de la carpeta /mitjana/sdb5/backup/*****.log,també podem veure quan s’ha executat el nostre crontab consultant el log del sistema.
 +
<pre>cat /var/log/syslog |grep crontab</pre>
 +
<br>
  
font: http://banyut.obolog.com/copias-seguridad-ubuntu-crontab-rsync-dd-65952
+
<br>Basat en: http://banyut.obolog.com/copias-seguridad-ubuntu-crontab-rsync-dd-65952

Revisió de 09:42, 15 feb 2011

L’objectiu d'aquest article és muntar backups de fitxers i directoris automàtics.

Backup de directoris i fitxers


Es tracta de fer un backup de tots els arxius del nostre usuari. Mantindrem un històric de backups, farem una còpia diària (dilluns, dimarts, dimecres, etc .), cada dilluns substituirem la còpia del dilluns anterior i així amb tots els dies.


El procediment és senzill, triarem els directoris i fitxers de què volem fer el backup, i els copiarem.

cp -rp ~/banyut /media/sdb5/backup/domingo


És totalment funcional, però la veritat és que no és eficient, el problema està en que cada dilluns ens farà una còpia completa de tots els arxius que tenim en el directori, quan el que seria desitjable és que només copiara els modificats o els creats des de l’últim backup.


No hi ha problema, tenim una altra instrucció que ens oferix esta funcionalitat.

rsync -altgvbp /home/banyut /media/sdb5/backup/domingo


El següent pas és que estes es realitzen de manera automàtica, per a això utilitzarem una altra instrucció que ens oferix el sistema crontab.
Crontab ens permet executar aplicacions en un moment determinat, una única vegada o de manera recurrent. En un principi pot paréixer quelcom embolicadora però en realitat és molt fàcil d’usar.

crontab -e


Esta instrucció ens permet editar l’arxiu /etc/crontab, en el que programarem les instruccions que volem executar.
Cada esbossa d’este arxiu esta formada per 7 columnes

Minutos (de 0 a 59

Horas (de 0 a 23)

Dia (de 1 a 31) 

Mes (de 1 a 12) 

Dia de la semana (de 0 a 7, donde 0 o 7 es domingo) 

usuario (opcional) 

orden a ejecutar


Un asterisc en qualsevol de les primeres 5 columnes indica tots, és a dir si volem que quelcom s’execute tots els mesos en la columna del mes podrem un asterisc.
En realitat és un poc mas complex però de moment ja ens val així.
Com funcionen estes columnes.

     5 * * * * se ejecutara el minuto 5 de cada hora todos los días.
     0 2 * * * a las 2:00H en punto cada día.
     0 2 * * 0 a las 2:00h todos los domingos del año.
     * 5 * * 1 todos los minutos de las 5:00 a 5:59 de todos los lunes.
     2 * 10 4 * el minuto dos de cada hora el dia 10 de abril de cada año.
     0 3 * * 6 a las 03:00 horas de todos los sábados


En cada una d’estes columnes podem posar més d’un valor, o inclús un rang, açò es fa separant cada valor per mitjà d’una coma o un rang per mitjà d’un guió.
Així en la columna dia de la setmana podem posar 1,3,5 que indicara que s’execute els dilluns, dimecres i divendres. O en la columna mes per a indicar la primera quinzena podem posar 1-15.
Açò encara podem complicar-ho un pèl més, tenim una altra operació el símbol “/”, que indica un increment, per exemple, si en la columna minuts posem */15 s’executarà cada 15 minuts, o si en la columna dies posem 1-10/2, s’executarà els dies 1,3,5,7 i 9.

Finalment un exemple més complex.

     0 */2 1-15,23,28-31 * 0,6 S’executara cada dos hores els dies 1 al 15,el 23, 28, 29, 30 i 31 de tots els mesos però només quan siguen dissabte o diumenge.


Sabent açò, ara podrem aconseguir que els nostres backups s’executen de manera automàtica.
Després de teclejar crontab -e afegirem les següents esbosses.

0 1 * * 0 instrucción_lunes

0 1 * * 1 instrucción_martes

0 1 * * 2 instrucción_miercoles

0 1 * * 3 instrucción_jueves

0 1 * * 4 instrucción_viernes

0 1 * * 5 instrucción_sabado

0 1 * * 6 instrucción_domingo


Amb açò aconseguirem que s’execute cada dia a les 01:00 hores les instruccions indicades. Podem substituir “instrucció_******” per l’orde rsync dalt descrita.
De totes maneres ho farem un pèl més complet, crearem un script per a cada dia de la setmana, a més arreplegarem un log.
Començarem creant els directoris necessaris.

mkdir ~/.crono_bak

cd ~/.crono_bak

Dins del directori que acabem de crear, crearem set fitxers mes cridats lunes.sh, martes.sh, ..., domingo.sh i en el seu interior posarem el següent.

!/bin/bash

pathLog="/media/sdb5/backup/logLunes.log"

echo ----------------------------------------------------------------------- >> $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 codi és el que correspon al script del dilluns, per als altres sis farem el mateix però substituint Dilluns pel dia de la setmana concret.
El script executa la instrucció rsync, la resta de les esbosses el que fan és generar un fitxer log.
Una vegada creats els set fitxers, haurem de donar-los permís per a poder executar-los.

chmod +x *.sh

Perquè s’execute tots els dies a l’1 del matí, el nostre crontab quedarà així.

m h dom mon dow command

0 1 * * 1 /home/banyut/.crono_back/lunes.sh >>/media/sdb5/backup/logcrono.log

0 1 * * 2 /home/banyut/.crono_back/martes.sh >>/media/sdb5/backup/logcrono.log

0 1 * * 3 /home/banyut/.crono_back/miercoles.sh >>/media/sdb5/backup/logcrono.log

0 1 * * 4 /home/banyut/.crono_back/jueves.sh >>/media/sdb5/backup/logcrono.log

0 1 * * 5 /home/banyut/.crono_back/viernes.sh >>/media/sdb5/backup/logcrono.log

0 1 * * 6 /home/banyut/.crono_back/sabado.sh >>/media/sdb5/backup/logcrono.log

0 1 * * 0 /home/banyut/.crono_back/domingo.sh >>/media/sdb5/backup/logcrono.log


La ruta /mitjana/sdb5/backup/sistema/ ha d’existir i en el seu interior ha d’haver-hi 7 directoris cridats dilluns, dimarts, etc.
Per a poder revisar la nostra programació executarem:

crontab -l

He donat per fet que el dimoni cron esta activat, per a comprovar açò podem executar.

ps -ef | grep crontab

En cas que no este en marxa ho iniciarem de la manera següent

sudo /etc/init.d/cron start

Finalment per a veure si s’ha executat bé podem mirar el log que hem creat en /mitja/sdb5/backup/logcrono.log podem mirar els logs del dia en concret dins de la carpeta /mitjana/sdb5/backup/*****.log,també podem veure quan s’ha executat el nostre crontab consultant el log del sistema.

cat /var/log/syslog |grep crontab



Basat en: http://banyut.obolog.com/copias-seguridad-ubuntu-crontab-rsync-dd-65952