A veces debemos asegurarnos que el script no se ejecute dos o más veces simultáneas. Para ello podemos hacer uso de los archivos de bloqueo. Pero, esto no es del todo fiable. ¿Qué pasaría si mientras nuestro script se está ejecutando es cerrado abruptamente?
En ese caso el archivo de bloqueo no se borraría, y por lo tanto, no nos permitiría ejecutar el script de nuevo. Para cubrir esos casos, podríamos hacer uso del comando trap que nos permite ejecutar comandos en caso que nuestro script termine de manera inesperada. Esta es una versión más avanzada que además guarda dentro del archivo de bloqueo el PID del script que lo ejecuta:
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash lockfile=/var/lock/loquesea.lock if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null; then trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT echo "hago muchas cosas aqui tranquilamente" rm -f "$lockfile" trap - INT TERM EXIT else echo "Ya hay otro proceso de este script ejecutandose" echo "corriendo con el PID: $(cat $lockfile)" fii |