PHP

Cron Singleton with flock

admin by @admin ADMIN
Jun 16, 2026
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
Make sure only one copy of a long-running cron job runs at a time. Uses a non-blocking advisory lock on a sentinel file — second invocation exits immediately if the lock is held.
PHP
Raw
<?php
function runIfNotLocked(string $lockFile, callable $job): bool {
    $fh = fopen($lockFile, 'c');
    if (!$fh) throw new RuntimeException("Cannot open $lockFile");
    if (!flock($fh, LOCK_EX | LOCK_NB)) {
        fclose($fh);
        return false;       // another instance is already running
    }
    try {
        $job();
        return true;
    } finally {
        flock($fh, LOCK_UN);
        fclose($fh);
    }
}

$ran = runIfNotLocked('/tmp/myjob.lock', function () {
    // Expensive cron task — runs only when no other copy holds the lock.
});
if (!$ran) error_log('myjob: skipped — another instance is running');
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.