【Linux】Linux中借助lockf机制,保证只有一个任务进程在执行
程序员文章站
2024-02-20 21:07:34
...
文件锁机制的作用:防止多个程序同时对一个不允许同时操作的工作做操作。
实现(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);
}
}