限制多个php脚本实例
我有一个脚本正在运行多次,因为验证需要更长的时间,并且允许脚本的多个实例。它应该每天运行一次,但昨天限制多个php脚本实例,php,validation,multiple-instances,Php,Validation,Multiple Instances,我有一个脚本正在运行多次,因为验证需要更长的时间,并且允许脚本的多个实例。它应该每天运行一次,但昨天script\u start()几乎在同一时间运行了18次 add_action('init', 'time_validator'); function time_validator() { $last = get_option( 'last_update' ); $interval = get_option( 'interval' ); $slop =
script\u start()
几乎在同一时间运行了18次
add_action('init', 'time_validator');
function time_validator() {
$last = get_option( 'last_update' );
$interval = get_option( 'interval' );
$slop = get_option( 'interval_slop' );
if ( ( time() - $last ) > ( $interval + rand( 0, $slop ) ) ) {
update_option( 'last_update', time() );
script_start();
}
}
听起来很混乱,您已经检测到18个脚本实例正在运行,尽管您不希望这样。您应该修复调用这些脚本实例的代码 但是,您可以在脚本本身中实现此检查。要确保脚本只运行一次,您应该使用。我举个例子: 将此项添加到每次只运行一次的代码顶部:
// open the lock file
$fd = fopen('lock.file', 'w+');
// try to obtain an exclusive lock. If another instance is currently
// obtaining the lock we'll just exit. (LOCK_NB makes flock not blocking)
if(!flock($fd, LOCK_EX | LOCK_NB)) {
die('process is already running');
}
。。。这就是关键代码的结尾:
// release the lock
flock($fd, LOCK_UN);
// close the file
fclose($fd);
所描述的方法在竞争条件下是安全的,它确实确保了关键部分只运行一次。听起来很混乱,您已经检测到18个脚本实例正在运行,尽管您不希望这样。您应该修复调用这些脚本实例的代码 但是,您可以在脚本本身中实现此检查。要确保脚本只运行一次,您应该使用。我举个例子: 将此项添加到每次只运行一次的代码顶部:
// open the lock file
$fd = fopen('lock.file', 'w+');
// try to obtain an exclusive lock. If another instance is currently
// obtaining the lock we'll just exit. (LOCK_NB makes flock not blocking)
if(!flock($fd, LOCK_EX | LOCK_NB)) {
die('process is already running');
}
。。。这就是关键代码的结尾:
// release the lock
flock($fd, LOCK_UN);
// close the file
fclose($fd);
所描述的方法在竞争条件下是安全的,它确实确保了关键部分只运行一次