http://qs321.pair.com?node_id=11134286


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;