Bash script con problemas de bloqueo de carpetas para archivos grandes

2

Mi script es:

#!/bin/bash

    # Path to a lock folder
LOCK_PATH="/Volumes/PROOFS_WATCH/copy.lock"

trap 'rmdir "$LOCK_PATH"; exit' 1 6 15

if mkdir "$LOCK_PATH"; then
    echo "Lock file did not exist and was created, Copying..."

        # Perform commands
    cp /Volumes/PROOFS_WATCH/*.mov /Volumes/PROOFS_WATCH/AME_Processing/
    cp /Volumes/PROOFS_WATCH/*.mov /Volumes/PROOFS_TV
    rm /Volumes/PROOFS_WATCH/*.mov 

        # Remove the lock
    rm -f "$LOCK_PATH"
fi

Mi salida es:

Lock file did not exist and was created, Copying...
cp: /Volumes/PROOFS_WATCH/*.mov: No such file or directory
cp: /Volumes/PROOFS_WATCH/*.mov: No such file or directory
rm: /Volumes/PROOFS_WATCH/*.mov: No such file or directory
rm: /Volumes/PROOFS_WATCH/copy.lock: is a directory
logout
[Process completed]

rm -f no elimina la carpeta de bloqueo por alguna razón ...

Me gustaría que este script se ejecute automáticamente a través de Cron cada 60 segundos. Si se está escribiendo un archivo grande, no quiero que se ejecute hasta que se complete la escritura del archivo.

Me estoy dando cuenta de lo que se puede hacer con bash y también quiero automatizar más procesos.

    
pregunta Brian 04.08.2015 - 20:42

1 respuesta

1

Corrección de la eliminación de bloqueo

Intente usar rmdir para eliminar la carpeta de bloqueo:

rmdir "$LOCK_PATH"

Rutas de depuración

Para depurar las rutas cp , intente este comando en Terminal.app:

open /Volumes/PROOFS_WATCH/

¿Se abre la carpeta esperada? Juega con la ruta hasta que open muestre la carpeta esperada en el Finder.

Para depurar la carpeta de bloqueo, intente ejecutar el script en dos ventanas de Terminal.app. ¿Ambos intentan y copian? Intente agregar una instrucción else para ver si mkdir funciona como se desea:

…
else
    echo "Lock exists."
fi

Depuración de scripts de shell

Eche un vistazo a Cómo agregar la comprobación de errores a sus scripts de shell para ayudar a identificar cualquier problema.

Enlaces duros

Se menciona en los comentarios a continuación una nueva restricción: es posible que otras aplicaciones estén escribiendo los archivos mientras se ejecuta este script. Esta secuencia de comandos no puede bloquear otras aplicaciones que cambian o escriben en las carpetas afectadas.

Si se está escribiendo un archivo, entonces cp solo verá y copiará un archivo parcial. La próxima vez que se ejecute el script, es probable que el archivo esté completamente disponible y se copie correctamente. Esto puede o no ser aceptable.

Si la copia se produce en el mismo volumen físico, es probable que se evite la copia. En lugar de una copia, considere crear un enlace físico con el ln tool:

ln <source_file> <target_file>
ln [-Ffhinsv] <source_file> ... <target_dir>

El enlace no copia ningún dato y es casi instantáneo. El cambio del archivo original o del archivo recién enlazado se reflejará en ambos.

Intente crear un enlace físico a mano antes de intentar cambiar el script:

ln /Volumes/PROOFS_WATCH/movie.mov /Volumes/PROOFS_WATCH/AME_Processing/movie.mov
    
respondido por el Graham Miln 04.08.2015 - 20:55

Lea otras preguntas en las etiquetas