¿Permitir una entrada a la vez en el trabajo incron?

¿Permitir una entrada a la vez en el trabajo incron?

Tengo un directorio para monitorear. Cuando se actualiza, ejecuto algún comando a través de incron. Cuando se copian varios archivos en este directorio, incron ejecuta varios comandos al mismo tiempo. ¿Hay alguna forma de que cuando se ejecuta un trabajo de incron, el segundo trabajo no se ejecute? he seguidoeste tutorialpara ayuda.

Respuesta1

No, incron no tiene una función de bloqueo incorporada. Si desea evitar que los trabajos se ejecuten al mismo tiempo, hágalo desde dentro del trabajo.

Si desea retrasar un trabajo hasta que los anteriores hayan finalizado, haga que se bloqueen. Puedes usar elflockdominio. Hay ejemplos en la página de manual.

Si desea omitir un trabajo si el anterior no ha terminado, aún puede usarlo flock, pero con un tiempo de espera de 0. Si no puede obtener el bloqueo, salga. Tenga en cuenta que esto es propenso a una condición de carrera: podría suceder que se copie un nuevo archivo justo después de que el trabajo n.° 1 haya terminado de enumerar los archivos, pero antes de que haya tenido tiempo de liberar el bloqueo, y el trabajo n.° 2 vería que el bloqueo está abierto. todavía retenido y salir sin procesar el archivo tampoco. No hay una manera fácil de resolver esa carrera.

Respuesta2

Un ejemplo de solución más simple: supongamos que 1 significa que el archivo está bloqueado (el script anterior ya se está ejecutando) y 0 significa desbloqueado (no hay ningún proceso en ejecución).

Entonces aquí está el código.

    state=`cat /tmp/my_lck`
    if [ "$state" -eq 1 ];then
        echo "Already executing!!!"
        exit
    else
        #Lock the file
        echo 1 > /tmp/nws_lck

       #Put you code here  

 #Unlock    
        echo 0 > /tmp/nws_lck

    fi

información relacionada