计划任务文件锁

使用场景

使用计划任务执行收益分配等需要修改状态的操作,当网站数据量或并发量较大导致程序或者数据库阻塞,以至于当前任务未完成时,第二个任务已经开始运行。此时前一个任务从数据库读取到的待执行数据的状态可能还没有改变,两个任务可能会读取重复的需要操作的待执行信息列表,导致重复分配等后果
此时我们需要保证在前一个任务未执行结束时,第二个任务不开始或者不执行。计划任务的执行是由操作系统控制,我们不好操作;我们便于操作的是脚本文件,可以使脚本不执行

思路

基本思路是使用php自带的 flock 文件锁函数,当计划任务执行时,给文件上锁,结束后解锁。下一个任务执行时,判断文件是否已解锁,未解锁则跳过执行程序

步骤

//首先建立一个文件作为脚本的替代文件,因为不能直接在文件内给当前文件加锁
//通过判断替代文件的锁定状态来决定脚本执行与否
$fp = fopen('file_lock.txt', "r");//打开文件
// 加锁
if(flock($fp, LOCK_EX)){
    //加锁成功,说明文件之前未锁定,执行操作
    ......
    //执行完毕后,解锁文件
    flock($fp,LOCK_UN);
}else{
    //加锁失败,说明文件未解锁,跳过执行操作
    echo 'no act';
}
fclose($fp);

猜你喜欢

转载自blog.csdn.net/u012830303/article/details/103233594