[NBLUG/talk] Mutual exclusion in shell scripts?
    Lincoln Peters 
    sampln at sbcglobal.net
       
    Sat Jan 20 16:07:33 PST 2007
    
    
  
I have the following shell script that I use to train spamassassin:
while [ -e /tmp/filter.lock ]
do
	sleep 10
done
touch /tmp/filter.lock
sa-learn $1 --no-sync
rm -f /tmp/filter.lock
Although multiple instances of the script may be called at the same time, I 
only want one to be running at a given time.  I do this because my mail 
server isn't powerful enough to handle multiple instances of sa-learn 
simultaneously.
If a second or two passes between calls to the script, everything seems to 
work OK.  However, if the script is called several times in rapid succession, 
e.g.:
filter.sh < msg1 & filter.sh < msg2 & filter.sh < msg3
Enough time passes between checking for /tmp/filter.lock and actually 
setting /tmp/filter.lock that every instance of the script runs 
simultaneously.  Is there a way to avoid that?
-- 
Lincoln Peters		<sampln at sbcglobal.net>
Many a man who thinks he's going on a maiden voyage with
a woman finds out later that it was just a shake-down cruise.
    
    
More information about the talk
mailing list