Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

Re^2: singleton lock not reliable

by stevieb (Canon)
on Jun 25, 2021 at 15:43 UTC ( #11134286=note: print w/replies, xml ) Need Help??

in reply to Re: singleton lock not reliable
in thread singleton lock not reliable

I've done one better. I've added a singleton() method. Its specifically designed to prevent more than one instance of any script (or processes that share the same shared memory segment). It's trivial to use, as it hides all of the various flags:

use IPC::Shareable; IPC::Shareable->singleton('LOCK'); # Do scripty perl stuff here

That's it. You can now be guaranteed that if a second instance of the script starts, it'll exit gracefully immediately as soon as singleton() is called.

You can also tell it to emit a notice that the script is exiting by sending in a true value as the second 'warn' param:

IPC::Shareable->singleton('LOCK', 1);

If a second instance is run, the following will be thrown:

Process ID 14784 exited due to exclusive shared memory collision

Version 1.03 has this update.

Replies are listed 'Best First'.
Re^3: singleton lock not reliable
by stevieb (Canon) on Jun 28, 2021 at 13:52 UTC

    Good, better, best!

    I released a new distribution, Script::Singleton that ensures only a single instance of a script can run at any time. No methods or flags to use, you simply:

    use Script::Singleton 'LOCK';

    That's it! LOCK is the glue/key that identifies the shared memory segment. As with my last update, send in a true value to get a warning if a second instance of a script tries to run but has to exit:

    use Script::Singleton 'LOCK', 1;

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11134286]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2022-05-20 07:29 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (73 votes). Check out past polls.