在cron作业中运行脚本时flock的问题

时间:2011-06-13 07:53:39

标签: php

我使用以下代码:

$fp = fopen("lock.txt", "w");
if (flock($fp, LOCK_EX|LOCK_NB)) { // do an exclusive lock
    //Do something here.
}else{
   echo "Could not lock file!";
}

当我从浏览器运行脚本(它锁定并且我只能运行一次)时,此代码运行正常但是当通过cron作业运行时,甚至没有创建lock.txt文件。我有点难过,因为我认为Cron运行的是运行浏览器版本的同一用户,所以它显然有权限。

其他人有这样的事情吗?

编辑:确定现在已创建文件我已完成目录的特定路径。但是,每次cron启动时都会覆盖该文件,而实际上并没有锁定文件。

2 个答案:

答案 0 :(得分:4)

这是正确的方法。

<?php
$tempDir = sys_get_temp_dir() . "/";
$fp = fopen("$tempDirlock.txt", "r+");

if (flock($fp, LOCK_EX | LOCK_NB)) { // do an exclusive lock
    // do the work

    flock($fp, LOCK_UN); // release the lock
} else {
    echo "Couldn't get the lock!";
}

fclose($fp);
?>

答案 1 :(得分:1)

为什么不使用fwrite用time()覆盖锁文件内容,并在脚本完成后清除文件。

您可以检查脚本是否正在运行以及运行时间。