How can I prevent more than one instance of a script from running?
I use flock -n "$0" true || exit 1
in some of my shell scripts that need locking (i.e. check whether the script itself has an advisory lock on it). The same could be implemented in Perl:
use FindBin qw($Bin $Script);
use Fcntl ':flock';
open my $fh, '>>', "$Bin/$Script" or die "open(>>$Bin/$Script): $!";
flock $fh, LOCK_EX|LOCK_NB or die "Another copy seems to be running";
mode may be required depending on how flock
is implemented (you may get by with just <
). Alternatively, remove |LOCK_NB
to make your process wait until it has the lock instead of terminating. Lock is automatically removed when the owning process terminates, so no need to manually unlock anything.