James Olin Oden spake the following on 8/29/2006 11:48 AM:
Actually if you use a language that supports flock() do the following:
Create lock file at installation of the script. In script call flock(2) in a non-blocking manner against this file. If you don't aquire the lock then exit with suitable message. If you do get the lock do your stuff and exit.
Locks aquired by flock automatically go away when the file handle is closed (and the filehandle automatically gets closed like or not after you exit a proccess...also in various languages scoping will also apply).
This is easily done in perl (man perlfunc and look up flock()), and if your comfortable in C its pretty trivial create said wrapper.
The key is the file must pre-exist before your script is ever called, because there is a race condition on creating the file, but you guarantee the files pre-existance the race condition is removed. Typically I would make the "lock" file owned by the package that delivers the software. No fuss, no muss.
Good luck...james
On 8/29/06, Scott Silva ssilva@sgvwater.com wrote:
...of a shell script for rsync that won't start again if it is already running? I thought of using a lock file, but what if it is killed mid script or bombs?
I was hoping to throw this together in bash, but I guess I'll dig out my perl book. I need some practice anyways.