I have an index.php
script that I use as a post-commit URL on a Google Code site. This script clones a directory and builds a project that may take some work.
how long does it take to run.
could use memcache
<?php
$m = new Memcache(); // check the constructor call
if( $m->get( 'job_running' ) ) exit;
else $m->set( 'job_running', true );
//index code here
//at the end of the script
$m->delete( 'job_running' );
?>
If the task fails you will need to clear from memcache. Flock is a good option too... probably better actually.
Only if you save the state of the running script and check when the script starts if an other script is currently active.
For example to save if a script is running you could do something like this:
$state = file_get_contents('state.txt');
if (!$state) {
file_put_contents('state.txt', 'RUNNING, started at '.time());
// Do your stuff here...
// When your stuff is finished, empty file
file_put_contents('state.txt', '');
}
You can use flock with LOCK_EX
to gain an exclusive lock on a file.
E.g.:
<?php
$fp = fopen('/tmp/php-commit.lock', 'r+');
if (!flock($fp, LOCK_EX | LOCK_NB)) {
exit;
}
// ... do stuff
fclose($fp);
?>
For PHP versions after 5.3.2 you need to manually release the lock using flock($fp, LOCK_UN);