Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any mutex/semaphore mechanism in shell scripts?

I'm looking for mutex/semaphore/concurrency mechanism in shell script. Consider following situation: Unless "a" user does not close the shared file, "b" user should not able to open/update it. I'm just wondering how to implement mutex, semaphore, critical sections, etc. in shell scripting.

Which is the easiest way to implement locking mechanism [file level] in shell scripting?

like image 433
Mandar Pande Avatar asked Jul 29 '11 08:07

Mandar Pande


2 Answers

The BashFAQ noted by shellter has some good examples. The basic idea, which I'm moving here so the page is self-contained, is to use an operation that both tests and sets at the same time: mkdir

mkdir will fail if the directory exists and will make it if it does not. It's an atomic operation and you can use it like so to do a mutex in your shell script (from the above BashFAQ)

# Bourne lockdir=/tmp/myscript.lock if mkdir "$lockdir" then    # directory did not exist, but was created successfully     echo >&2 "successfully acquired lock: $lockdir"     # continue script else    # failed to create the directory, presumably because it already exists   echo >&2 "cannot acquire lock, giving up on $lockdir"   exit 0 fi 

follow the link for more detail on cleanup and other items.

like image 171
Paul Rubel Avatar answered Sep 19 '22 19:09

Paul Rubel


See BashFAQ and ProcessManagment for discussions on file locking in Bash.

Tagging your question as shell (only) limits the number of people that can help you. You may want to add unix, ksh, bash.

There are numerous questions/answers on this topic posted here already on S.O.

I hope this helps.

like image 45
shellter Avatar answered Sep 21 '22 19:09

shellter