Crontab: programar mis copias de seguridad

Crontab: programar mis copias de seguridad

Quiero hacer una copia de seguridad todos los viernes por la noche (no, esta no es toda la rutina de copia de seguridad, solo una parte). La copia de seguridad de cada viernes por la noche no se sobrescribirá hasta 4 semanas después. Básicamente, tengo cuatro copias de seguridad rotativas: Semana 1, Semana 2, Semana 3 y Semana 4.

Ahora, necesito que el script de copia de seguridad de la semana 1 se ejecute cada 4 semanas. Pero también quiero que el script de la semana 2 se ejecute cada cuatro semanas. Sé que puedo decirle al crontab que ejecute algo cada X semanas/días/horas/lo que sea. Sin embargo, ¿cómo lo configuro para que cada uno de estos cuatro scripts se ejecute en semanas diferentes? ¿Cómo evito que los 4 scripts se ejecuten la misma noche y luego esperen diligentemente durante semanas solo paratodo¿corre de nuevo?

Respuesta1

en lugar de diseñar rutinas de respaldo tan complejas, considere usar Bacula, que es un software gratuito de código abierto de clase empresarial. Bacula es muy flexible y puede automatizar las tareas de respaldo en casi todas las formas posibles que desee.

Incluso si puede crear su solución MANUAL, tiene muchos inconvenientes:

  • Los errores de seguimiento serían un gran problema
  • El seguimiento de los puestos de trabajo sería un dolor de cabeza
  • La configuración manual siempre necesita un seguimiento constante.

El mejor administrador de sistemas es aquel que automatiza todo y se relaja.

Respuesta2

Creo que la respuesta de Frank es la mejor, pero para hacer lo que usted describe, puede hacer una copia de seguridad de un cronjob todos los viernes y luego usar la rotación de registros para conservar las últimas cuatro copias. O busque cualquier copia de seguridad que tenga más de cuatro semanas.

Respuesta3

Una alternativa: ponga la complejidad en su script, ya que es más capaz de manejar ese tipo de complejidad que cron. Entonces (asumiendo bash):

  • Haga que su trabajo cron ejecute el mismo script todos los viernes.
  • Modifique su script para obtener el módulo 4 de las semanas desde la época:

(problema de formato estúpido, es necesario poner texto ficticio aquí)

epochsecs=`date +%s`   # second since epoch

y

weeknum=`expr $epochsecs / 86400 / 7 % 4`  # weeks since epoch, modulo 4
  • Utilice ese número como parte del nombre del archivo de copia de seguridad.

    backupfile=/ruta/a/backup/file.$weeknum

  • Sobrescriba los archivos de copia de seguridad antiguos.

    rm $archivo de respaldo tar czvf $archivo de respaldo /grupo/de /directorios

Alternativamente, simplemente use un sufijo de nombre de archivo con la fecha:

backupfile=/path/to/backup/file.`date +%Y-%m-%d`

luego ejecute una búsqueda en su secuencia de comandos que eliminará los archivos de respaldo que tengan más de 28 días:

find /path/to/backup -maxdepth 1 -ctime +28 -delete

En cualquier caso, no sobrecargues a cron con este tipo de complejidad. Manéjelo en el script, que probablemente sea más capaz de manejar la complejidad.

Respuesta4

Dos alternativas:

  • Programe una secuencia de comandos para que se ejecute todos los viernes que realice un seguimiento de qué trabajo se ejecutó por última vez y ejecute el siguiente trabajo en la secuencia.

o:

  • Programe la semana 1 para que se ejecute los días 1 a 7 del mes y solo los viernes.
  • Programe la semana 2 para que se ejecute los días 8 a 14 del mes y solo los viernes.
  • ... etcétera.
  • Notarás que esto no te da una ideaperfectocopia de seguridad: habrá ocasiones en las que se perderá una semana de copia de seguridad (cuando el día 29/30/31 caiga en viernes)

Este tipo de cálculo es exactamente el motivo por el cual, tantoDivertidoComo es hacer todo usted mismo, terminará más adelante utilizando una herramienta de respaldo adecuada como Amanda o Bacula, comoFrank sugiere.

información relacionada