flock
è davvero eccellente per questo. Puoi usare flock
in un wrapper attorno al tuo script di shell, usalo sulla riga di comando o incorporalo nel tuo script stesso.
La cosa migliore di flock
è che mentre attende, non attende in un ciclo occupato.
È anche sempre pulisce il blocco quando il processo termina / flock
esce.
I metodi basati sulla creazione di file/directory atomici possono essere bloccati se il processo termina senza ripulire (o se si verifica un panico del kernel o un'interruzione di corrente, ...).
Con flock
, il kernel Linux esegue la pulizia.
Dal manuale,
(
flock -s 200
# ... commands executed under lock ...
) 200>/var/lock/mylockfile
In questo modulo puoi avvolgere uno specifico blocco di codice nel tuo script di shell.
Oppure puoi eseguirlo in questo modo,
/usr/bin/flock /tmp/lockfile command
Se non vuoi bloccare/attendere indefinitamente, puoi specificare un timeout:
-w --timeout <secs> wait for a limited amount of time
Oppure usa semplicemente un argomento non bloccante:
-n --nonblock fail rather than wait