Create a gist now

Instantly share code, notes, and snippets.

@didenko /lockdemo
Last active Aug 9, 2016

Locking daemon in bash example
#!/bin/bash
# As detailed at http://blog.didenko.com/2010/08/locking-for-daemons-in-bash.html
pidf=/tmp/$(basename ${0}).pid
exec 221>${pidf}
flock --exclusive --nonblock 221 ||
{
echo "Another instance is apparently running."
exit 1
}
echo ${$}>&221
echo "Running as process ID "${$}
echo "The process ID is stored in the file "${pidf}
echo "About to get buzy for about 20 seconds"
for (( i=0 ; i < 10; i=i+1 ))
do
echo -n "z-"
sleep 2
done
echo "Oh!"
echo "Done all the hard work. Exiting."
@oliverrahner

Maybe I didn't fully understand it, but how do we avoid file descriptor collision with other scripts?

EDIT: Nevermind, just tried it :) The actual pid file still matters.

@drevicko
drevicko commented Aug 8, 2016 edited

As I understand it, line 6: exec 221>${pidf} clobbers the pid file, so if you run a second instance, the pid file is erased.

I tried exec 221>>${pidf} instead, but echo ${$}>&221 did not erase the file as I thought it might, so I end up with a list of past pid's. Suggestions?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment