intermachine flocking

Dominic Mitchell dom at happygiraffe.net
Tue Dec 13 16:38:02 GMT 2005


On Tue, Dec 13, 2005 at 04:24:51PM +0000, Simon Wistow wrote:
> 
> We have a farm of machines which will have access to a file. We only 
> want one of the machines accessing that file at once - if a process 
> cannot get a lock on the file then it should exit immediately otherwise 
> it shoudl write the necessary number of times to the file and then exit.
> 
> Of course flock() doesn't work across NFS. Is the only solution to this 
> a flock daemon?

If you're in Perl, flock() is probably implemented using fcntl(), which
is supported over NFS.  Run strace over a test script to verify.

If it's not, then you need to do jiggery pokery with lockfiles.  This
involves, IIRC, creating a temp file using your hostname, pid, current
time, and $i++.  You then have to call link() and then stat() in order
to check that the number of links is correct.  Or something like that...
Basically you want to look like a Maildir.

This seems to describe what I'm thinking of:

  http://www.exim.org/pipermail/exim-users/Week-of-Mon-19990531/012756.html

-Dom


More information about the london.pm mailing list