NAME

Acrux::FileLock - The Lock File simple interface

SYNOPSIS

use Acrux::FileLock;

my $fl = Acrux::FileLock->new(
    file => '/tmp/file.lock',
    pid  => $$,
    auto => 0,
);

if ( my $pid = $fl->check ) {
    warn $fl->error if $fl->error;
    die "Already running: $pid";
}

$fl->lock;
die $fl->error if $fl->error;

# . . . do stuff . . .

$fl->unlock;
die $fl->error if $fl->error;

... or with auto-lock and auto-unlock:

my $fl = Acrux::FileLock->new(
    file => '/tmp/file.lock',
    pid  => $$,
    auto => 1,
);

die $fl->error if $fl->error;
die "Already running" if $fl->check;

# . . . do stuff . . .

DESCRIPTION

The Lock File simple interface

This package manages a lock files. It will create a lock file, query the process within to discover if it's still running, and remove the lock file. This module based on Lock::File, File::TinyLock, JIP::LockFile, LockFile::Simple and Acrux::FilePid.

METHODS

This module implements the following methods

new

my $fl = Acrux::FileLock->new(
    file    => '/tmp/file.lock',
    delay   => 60,
    retries => 5,
    pid     => $$,
    auto    => 1,
);

This constructor takes several optional attributes:

auto
auto => 0

If this flag specified as true, then will be saved the lock file automatically while instance create and removed the lock file automatically on DESTROY phase. Default: false

debug
debug => 0

Print debugging messages to STDERR (0=Off (default), 1=On)

delay
delay => 60

Number of seconds to wait between retries to getting a lockfile

Default: 60

file
file => '/tmp/test.lock'

The name of the lock file to work on. If not specified, a lock file located in current directory will be created that matches ./basename($0).lock.

pid
pid => $$

The pid to write to a new lockfile. If not specified, $$ is used when the lock file doesn't exist. When the lock file does exist, the pid inside it is used.

retries
retries => 5

Number of times to retry getting a lockfile

Default: 5

check

if ( my $pid = $fl->check ) {
    warn $fl->error if $fl->error;
    die "Already running: $pid";
}

This method checks the lock file and returns the PID of the process that first acquired the lock. Otherwise returns 0 if no lock file found

error

my $error = $fl->error;

Returns current error message

file

my $file = $fl->file;

Accessor for the filename used as the lock file.

lock

$self = $self->lock;

This method creates a lock file and stores the current PID in it.

own

$fl->own(123);
my $owner_did = $fl->own;

Accessor/mutator for the pid being saved to the lock file.

owner

my $owner_uid = $fl->owner || 0;

This method returns the numeric user ID of lock file's owner or undef otherwise

pid

my $pid = $fl->pid;

Accessor for the pid being saved to the lock file.

unlock

$self = $self->unlock;

This method performs unlocking the lock file and removes it

HISTORY

See Changes file

TO DO

See TODO file

SEE ALSO

Lock::File, File::TinyLock, JIP::LockFile, LockFile::Simple, Acrux::FilePid

AUTHOR

Serż Minus (Sergey Lepenkov) https://www.serzik.com <abalama@cpan.org>

COPYRIGHT

Copyright (C) 1998-2026 D&D Corporation

LICENSE

This program is distributed under the terms of the Artistic License Version 2.0

See the LICENSE file or https://opensource.org/license/artistic-2-0 for details