GNU/Linux >> Tutoriales Linux >  >> Linux

hacer que un cronjob espere a que finalice el trabajo anterior de rsync

Solución 1:

Puede implementar algún tipo de bloqueo. Esto imprimirá la cantidad de procesos rsync que aún se están ejecutando:

pgrep -cx rsync

Y esto ejecutará el rsync solo si no existe otro proceso de rsync:

pgrep -cx rsync || rsync ...

Usando -x evitará coincidencias accidentales de nombres no deseados (por ejemplo, "foobarsync hronizator" o "not_an_rsync _totally" - funciona igual que pgrep -c ^rsync$ )

Solución 2:

Puede usar el comando flock para ayudarlo a hacer esto, p. En este caso flock -n es probablemente lo que desea, ya que provocará una falla inmediata del comando si no puede obtener el bloqueo, por ejemplo,

30 * * * *  /usr/bin/flock -n /tmp/myRsyncJob.lck /path/to/your/rsyncScript 

Solución 3:

Esto es lo que haría. Cree un script contenedor alrededor de rsync para crear un archivo de bloqueo.

script 1
- create lock file
- rsync
- remove lock file

script 2 (running later then script 1)
- check if lock file is there
    - if not run
    - if it is there wait 10 minutes in a loop. break out of lopp when the lock file is gone
- continue to run script

Solución 4:

Si está dispuesto a considerar otras herramientas, también puede echar un vistazo a rdiff-backup. Utiliza librsync para hacer copias de seguridad y guarda una cantidad configurable de deltas/incrementos. También se bloquea para que solo se pueda ejecutar un proceso de copia de seguridad de rdiff en un momento dado.

Solución 5:

Mi respuesta es algo similar a lo que dijo Mike.

En el script, deberías poner algo como esto:

  • crear un archivo de bloqueo
  • Compruebe la existencia del archivo de bloqueo cuando lo ejecute la próxima vez.

Pero hay una cosa muy importante que deberías estar haciendo. y eso de implementar un sistema de trampas.

Entonces, con eso, lo que puede hacer es que incluso si su secuencia de comandos se elimina de alguna manera o alguien la elimina, entonces puede atrapar esa señal y eliminar el archivo de bloqueo, para que no tenga un archivo de bloqueo obsoleto.

Puedes leer cómo implementar eso aquí.

Solo una pequeña cosa, no puedes atrapar la señal 9, quiero decir, si alguien hace kill -9 , no puede atrapar eso ya que esa señal interactúa directamente con el núcleo y no hay forma de atrapar eso.

Además, como sugirió John, debe eliminar el archivo de bloqueo cada vez que se reinicia el sistema, solo para asegurarse de que no quede ningún archivo obsoleto.

Eso lo puedes hacer fácilmente poniendo un pequeño rm -f <FILE> comando en /etc/rc.local


Linux
  1. ¿Transferencias de archivos más inteligentes que Rsync?

  2. Linux:¿cómo hacer que Sar se muestre para el día anterior?

  3. ¿Hacer que Bat File esté disponible en todas partes para la terminal?

  4. ¿Cómo hacer que el archivo sea disperso?

  5. ¿Cómo RSYNC un solo archivo?

Comando ls en Linux para listar archivos

Cómo hacer un archivo ejecutable en Linux

¿Tiempo estimado o trabajo restante para terminar para Rsync?

¿Esperar a que terminen de descargarse varios archivos?

¿Existe un delineador para verificar el archivo?

Cómo usar ejemplos de bloqueo C Mutex para la sincronización de subprocesos de Linux