user3647894
user3647894

Reputation: 599

Using flock() in crontab

I am using a crontab that executes a PHP file. I want to implement the flock() command to help prevent duplicate crontabs from running at one time. If I have:

* * * * * php /var/www/html/welcome.php

How can i add this flock() command? Thanks!

Upvotes: 0

Views: 1709

Answers (2)

Anyone_ph
Anyone_ph

Reputation: 616

For complete your answer and as you use a crontab every minute, you may encounter a problem :

If for any reason, your script lack to finish in 1 minute his job or the script fail somewhere and does not remove the lock (stuck inside a 'while'...), the next crontab will start and stay in your process list until the previous remove his lock, and so on...

A better approach would be :

$fh = fopen('/path/to/mutex.txt', 'r');  //Any convenient file (MUTual EXclusion)

  if(!flock($fh, LOCK_EX | LOCK_NB)) //Exit if lock still active
   exit(-1);

   //Your code here

  flock($fh, LOCK_UN);      //release lock
  fclose($fh);              //close Mutex file.

And that will avoid any stack of process php

Upvotes: 0

user1864610
user1864610

Reputation:

Try this:

$fh = fopen('mutex.txt','r');  // Any convenient file (MUTual EXclusion)
flock($fh, LOCK_EX);       // get exclusive lock. Will block until lock is acquired

// Do your exclusive stuff...

flock($fh, LOCK_UN);      // release lock
fclose($fh);              // close Mutex file.

Upvotes: 2

Related Questions