[CentOS] Re: Any one have a good example...

Tue Aug 29 21:23:47 UTC 2006
Marko A. Jennings <markobiz at bluegargoyle.com>

On Tue, August 29, 2006 5:07 pm, Scott Silva wrote:
> Johnny Hughes spake the following on 8/29/2006 1:02 PM:
>> On Tue, 2006-08-29 at 15:59 -0400, mike.redan at bell.ca wrote:
>>> Maybe I am being dense here ... BUT ...
>>>
>>> Doesn't the "echo $$" only happen AFTER the else process is finished
>>> ???
>>>
>>> if you make the "else" process be the rsync script, then it will not
>>> create $pidfile until after the rsync is done ... which does not help
>>> you.
>>>
>>> if you leave the else process as is and kick off the rsync after the
>>> echo $$ then it is not the same PID that you wrote to the $pidfile and
>>> you will start more than one rsync process ... as the PID that you
>>> wrote
>>> to $pidfile as the echo process ... that already finished ... or I am
>>> mistaken?
>>>
>>>
>>> The idea of it is to place that bit of code at or near the beginning of
>>> your script, then have the rsync process start after the "echo $$".
>>> That
>>> will put the PID of your script into that file, the rsync process will
>>> be started in the script, and the script would not end until the rsync
>>> one does..so you are fairly safe that two instances of your script will
>>> run at thte same time..
>>>
>>
>> OK ... I see.
>>
>> The rsync process is a second PID ... but the first PID is also still
>> open until after the script closes.
> I tried the above, but was able to start multiple copies of the script.
> So I will have to see what is not catching the runs.
> The lockfile is there, but not stopping another execution of the script.
>

I use the lockfile utility.  Take a look at its man page, it is well
written.  Here is how I use it (Bourne shell):

# try to create the lock and check the outcome
lockfile -r 0 /var/run/myapp.lock 1>/dev/null 2>&1
status=$?

if [ ${status} -ne 0 ] ;then
        echo "Another instance already running. Aborting."
        exit 1
fi

# body of the script here

# remove the lock at the end of the script
rm -f /var/run/myapp.lock