Block execution of script while same script is already running


#1

Hi,

Does anybody no how I may achieve it:

Bob is starting script my_test.rb which runs a over an hour…
5 minutes later…
Alice is not knowing that Box has already started is and starts it
again.
Script should detect that it is already running and stop executing.

What is the best way to achieve this?

Thanks a lot.


#2

2008/12/17 removed_email_address@domain.invalid removed_email_address@domain.invalid:

Bob is starting script my_test.rb which runs a over an hour…
5 minutes later…
Alice is not knowing that Box has already started is and starts it
again.
Script should detect that it is already running and stop executing.

What is the best way to achieve this?

There are solutions for this in the archives of this list. You can
use an exclusive file lock on $0 as an example.

Kind regards

robert


#3

On Wed, Dec 17, 2008 at 9:37 AM, removed_email_address@domain.invalid
removed_email_address@domain.invalid wrote:

What is the best way to achieve this?

Thanks a lot.


Volker

Daniel B. suggested the following technique (see thread starting
at ruby-talk:302489).

This is my version:

def single_instance(&block)
if File.open($0).flock(File::LOCK_EX|File::LOCK_NB)
block.call
else
warn “Script #{ $0 } is already running”
end
end

single_instance do

your main code here

end

Regards,
Sean