【Linux】Linux中借助lockf机制,保证只有一个任务进程在执行

文件锁机制的作用:防止多个程序同时对一个不允许同时操作的工作做操作。

实现(lockf)
在Linux中我们可以借助lockf命令来实现文件锁机制
安装

tar -xzf lockf_linux.tar.gz
cd lockf_linux
make && make install

使用

lockf –help
-k 锁定文件,如果当前文件被锁,则输出 lockf:/tmp/create/lock :already locked
-s 锁定文件,不输出任何信息 silent
-t second :超时时间,超时就退出

应用示例:

lockf -s -t 0 /tmp/create.lock /usr/local/bin/php -f xxx.php

先判断/tmp/create.lock 文件是否被锁,被锁则立即退出,否则将会执行后面的脚本。

第一次运行会给/tmp/create.lock 文件上锁,并执行后面的命令,(如果不存在则创建)

当第二次运行该命令时,/tmp/create.lock 文件已经被锁,命令将会直接退出,而不会去执行后面的/usr/local/bin/php -f xxx.php 的脚本。

例子:

//增加lockf机制,保证只有一个任务进程在执行
function runScript($file, $num = 1)
{
    $cmd = getCmd($file);
    if ($cmd === false) {
        return false;
    }
    for ($i = 0; $i < $num; $i++) {
        $lock = '.' . md5($file . $i) . '.lock';  //随机生成一个隐藏文件名
        $realCmd = '/usr/bin/lockf -t 0 ' . $lock . ' ' . $cmd;   //会自动创建$lock文件,当lockf执行完后,会自动清除$lock文件
        //pclose(popen($cmd, 'r'));
        shell_exec($realCmd);
    }
}

你可能感兴趣的:(linux,php)