Re: Ensure only single application instance.

2008-08-30 Thread Larry Bates

Cameron Laird wrote:

In article <[EMAIL PROTECTED]>,
Uberman  <[EMAIL PROTECTED]> wrote:

On Fri, Aug 29, 2008 at 6:51 AM, Heston James <[EMAIL PROTECTED]> wrote:

Good afternoon all.

I have an application/script which is launched by crontab on a regular
basis. I need an effective and accurate way to ensure that only one instance
of the script is running at any one time.

You could create a named pipe in /tmp with a unique (static) name and
permissions that disallow any kind of read/write access.  Then simply have
your script check for its existence when it starts.  If it exists, then
another instance of your script is running, and just terminate.  Make sure
your original instance removes the pipe when it exits.


I'll write an article on this subject this fall.  The
essentials are:
A.  There's no canonical answer; every apparent solution
has problems;
B.  The suggestions offered you are certainly among the
popular ones;
C.  My personal favorite is to open a (network) socket
server.  For reasons I'll eventually explain, this
has particularly apt semantics under Unix.


Cameron,

I found this recipe (http://code.activestate.com/recipes/474070/) on 
ActiveState's site that had a working version of a single instance class for 
Windows that I've used quite successfully.  Since I also work a lot Linux, I 
wrote and donated this version (http://code.activestate.com/recipes/546512/) for 
Linux that also seems to work well for me.


-Larry
--
http://mail.python.org/mailman/listinfo/python-list


Re: Ensure only single application instance.

2008-08-29 Thread Frank Millman
On Aug 29, 11:25 pm, Uberman <[EMAIL PROTECTED]> wrote:
> On Fri, Aug 29, 2008 at 6:51 AM, Heston James <[EMAIL PROTECTED]> wrote:
> > Good afternoon all.
>
> > I have an application/script which is launched by crontab on a regular
> > basis. I need an effective and accurate way to ensure that only one instance
> > of the script is running at any one time.
>

The following is taken from the getmail FAQ -

--
If you need to prevent two instances of getmail from running
simultaneously, use any standard Unix method of providing a mutex for
this purpose. One example would be to run getmail under a program like
setlock (part of the daemontools package). Change your script or
crontab file to invoke getmail like this:

/path/to/setlock -n /path/to/lockfile /path/to/getmail [getmail
options]

There are other programs that provide functionality similar to
setlock.
--

HTH

Frank Millman
--
http://mail.python.org/mailman/listinfo/python-list


Re: Ensure only single application instance.

2008-08-29 Thread Cameron Laird
In article <[EMAIL PROTECTED]>,
Uberman  <[EMAIL PROTECTED]> wrote:
>On Fri, Aug 29, 2008 at 6:51 AM, Heston James <[EMAIL PROTECTED]> wrote:
>> Good afternoon all.
>>
>> I have an application/script which is launched by crontab on a regular
>> basis. I need an effective and accurate way to ensure that only one instance
>> of the script is running at any one time.
>
>You could create a named pipe in /tmp with a unique (static) name and
>permissions that disallow any kind of read/write access.  Then simply have
>your script check for its existence when it starts.  If it exists, then
>another instance of your script is running, and just terminate.  Make sure
>your original instance removes the pipe when it exits.

I'll write an article on this subject this fall.  The
essentials are:
A.  There's no canonical answer; every apparent solution
has problems;
B.  The suggestions offered you are certainly among the
popular ones;
C.  My personal favorite is to open a (network) socket
server.  For reasons I'll eventually explain, this
has particularly apt semantics under Unix.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Ensure only single application instance.

2008-08-29 Thread Uberman
On Fri, Aug 29, 2008 at 6:51 AM, Heston James <[EMAIL PROTECTED]> wrote:
> Good afternoon all.
>
> I have an application/script which is launched by crontab on a regular
> basis. I need an effective and accurate way to ensure that only one instance
> of the script is running at any one time.

You could create a named pipe in /tmp with a unique (static) name and
permissions that disallow any kind of read/write access.  Then simply have
your script check for its existence when it starts.  If it exists, then
another instance of your script is running, and just terminate.  Make sure
your original instance removes the pipe when it exits.
--
http://mail.python.org/mailman/listinfo/python-list


Re: Ensure only single application instance.

2008-08-29 Thread Timothy Grant
On Fri, Aug 29, 2008 at 6:51 AM, Heston James <[EMAIL PROTECTED]> wrote:
> Good afternoon all.
>
> I have an application/script which is launched by crontab on a regular
> basis. I need an effective and accurate way to ensure that only one instance
> of the script is running at any one time.
>
> After a short look around the internet I found a couple of examples, such as
> this one (http://code.activestate.com/recipes/474070/), however they both
> seem to be focused on a windows based environment.
>
> Can anyone offer their advice on how best to do this on a linux based
> system?
>
> I have been contemplating the idea of creating a pidfile which is destroyed
> at the end of the script, will this suffice? is it fool proof? My only
> concern with this is that if the script crashes or is stopped halfway
> through processing for whatever reason, I'll be left with a dead pidfile on
> the system and no successive runs will work.
>
> I'm really interested to get your ideas guys, Thanks.
>
> Heston
>
> 
> Get Hotmail on your mobile from Vodafone Try it Now!
> --
> http://mail.python.org/mailman/listinfo/python-list
>

Why not look at the process list, and if you find two entries kill the
one that is just starting?


-- 
Stand Fast,
tjg. [Timothy Grant]
--
http://mail.python.org/mailman/listinfo/python-list


Re: Ensure only single application instance.

2008-08-29 Thread Alex
SOP is to write the actual PID of the running process into the pidfile, then
check to a) that the pidfile exists, and b) that the process referenced in
the pidfile exists.  if the pidfile exists, but the process does not, take
over the pidfile and carry on.

On Fri, Aug 29, 2008 at 9:51 AM, Heston James <[EMAIL PROTECTED]>wrote:

> Good afternoon all.
>
> I have an application/script which is launched by crontab on a regular
> basis. I need an effective and accurate way to ensure that only one instance
> of the script is running at any one time.
>
> After a short look around the internet I found a couple of examples, such
> as this one (http://code.activestate.com/recipes/474070/), however they
> both seem to be focused on a windows based environment.
>
> Can anyone offer their advice on how best to do this on a linux based
> system?
>
> I have been contemplating the idea of creating a pidfile which is destroyed
> at the end of the script, will this suffice? is it fool proof? My only
> concern with this is that if the script crashes or is stopped halfway
> through processing for whatever reason, I'll be left with a dead pidfile on
> the system and no successive runs will work.
>
> I'm really interested to get your ideas guys, Thanks.
>
> Heston
>
> --
> Get Hotmail on your mobile from Vodafone Try it 
> Now!
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>
--
http://mail.python.org/mailman/listinfo/python-list

Ensure only single application instance.

2008-08-29 Thread Heston James
Good afternoon all.
 
I have an application/script which is launched by crontab on a regular basis. I 
need an effective and accurate way to ensure that only one instance of the 
script is running at any one time.
 
After a short look around the internet I found a couple of examples, such as 
this one (http://code.activestate.com/recipes/474070/), however they both seem 
to be focused on a windows based environment.
 
Can anyone offer their advice on how best to do this on a linux based system?
 
I have been contemplating the idea of creating a pidfile which is destroyed at 
the end of the script, will this suffice? is it fool proof? My only concern 
with this is that if the script crashes or is stopped halfway through 
processing for whatever reason, I'll be left with a dead pidfile on the system 
and no successive runs will work.
 
I'm really interested to get your ideas guys, Thanks.
 
Heston
_
Win a voice over part with Kung Fu Panda & Live Search   and   100’s of Kung Fu 
Panda prizes to win with Live Search
http://clk.atdmt.com/UKM/go/107571439/direct/01/--
http://mail.python.org/mailman/listinfo/python-list