flock
es realmente excelente para esto. Puedes usar flock
en un envoltorio alrededor de su script de shell, utilícelo en la línea de comandos o incorpórelo a su propio script.
Lo mejor de flock
es que mientras espera, no espera en un bucle ocupado.
También siempre limpia el bloqueo cuando su proceso sale / flock
salidas
Los métodos basados en la creación de archivos/directorios atómicos pueden quedar bloqueados si el proceso finaliza sin limpiar (o si hay un kernel panic, o falla de energía, ...).
Con flock
, el kernel de Linux hace la limpieza.
Del manual,
(
flock -s 200
# ... commands executed under lock ...
) 200>/var/lock/mylockfile
En este formulario, puede envolver un bloque específico de código en su script de shell.
O puedes ejecutarlo así,
/usr/bin/flock /tmp/lockfile command
Si no desea bloquear/esperar indefinidamente, puede especificar un tiempo de espera:
-w --timeout <secs> wait for a limited amount of time
O simplemente use un argumento que no bloquee:
-n --nonblock fail rather than wait