【发布时间】:2010-06-21 05:27:11
【问题描述】:
我似乎无法弄清楚这一点。
我有一个验证器类型的脚本来验证我服务器上的某些文件(检查是否存在、其内容等)。我希望它只使用一个实例连续运行,而不是更多。我目前的解决方案似乎不起作用,我猜是由于超时(也可能是其他原因)。对于我验证的每个文件,我将 php 超时设置为 60 秒。我在脚本的顶部有这个:
$trigger_file2 = 'path/to/a/randomfile';
if (file_exists($trigger_file2)){
//another script is working, exit
exit;
}
// create file inside app
$handle = fopen($trigger_file2, 'w');
fwrite($handle, '0');
fclose($handle);
在脚本的最后,我只是在触发器文件上使用了 unlink()。由于可能的超时以及可能的其他原因,触发器文件并不总是被删除并且会导致问题。我还尝试添加检查触发器文件修改时间的代码,如果超过 10 分钟,则删除,但这确实效率低下,因为问题经常发生。
关于如何解决这个问题的任何想法?我想用运行脚本的 PID 做一些事情,但我使用 CakePHP 作为脚本,所以每个进程看起来都在使用 index.php(我认为)。
关于如何做到这一点的任何其他想法?非常感谢您的帮助。
【问题讨论】: