From: Brian Candler Date: 2009-06-30T17:46:55+09:00 Subject: Re: locking a process If you're running under a Unix-like system, then you can do something as simple as this: File.open("/tmp/mylock","w") do |f| raise "Already running" unless f.flock(File::LOCK_EX | File::LOCK_NB) ... rest of code end Might even be able to combine the open and lock using IO.sysopen, I haven't dug into that. Only works if all processes are on the same machine of course. However I don't think it's necessary for your job here: > 1) pull images off a CF card on my laptop > 2) move the images to a server > 3) rename the images on the server according to the EXIF info All your script needs to do is to 'grab' each file by renaming it using File.rename, e.g. File.rename(fn, "#{fn}.working"). If this is successful then it can be sure it has the file. If it fails, then it means some other program grabbed the file first, so it can skip. However if your script is aborted midway through it may leave some files in this grabbed state, so they would need renaming back again manually. Another option is to forget cron, and just start the program in the background; it processes whatever files it can, sleeps for 300 seconds, and then loops around. This will consume RAM on your machine while the process sleeps though. -- Posted via http://www.ruby-forum.com/.