我试图阻止我的cron脚本允许它并行运行。我需要它,以便如果当前没有执行它,脚本将被允许运行直到它完成,脚本超时或发生异常。停止并行执行PHP脚本
我一直在尝试使用PHP flock函数进行文件锁定,运行脚本并释放锁定。但是,它仍然看起来像我能够并行运行脚本多次。我错过了什么吗?
顺便说一句,我正在开发与Mac文件系统的Mac OS X,也许这是文件锁被忽略的原因?虽然PHP文档只看起来关于NTFS文件系统?
// Construct cron lock file path
$cronLockFilePath = realpath(APPLICATION_PATH . '/locks/cron');
// Get cron lock file
$cronLockFile = fopen($cronLockFilePath, 'r');
// Lock cron lock file
if (flock($cronLockFile, LOCK_EX)) {
echo 'lock';
sleep(10);
} else {
echo 'no lock';
}
处理错误不应该是一个问题,我只会捕获所有异常,然后取消链接创建的文件...但我想象,处理脚本终止是不可能的,例如服务器重新启动,apache重新启动或脚本超时。 。因为它是一个cron文件,我可能会让脚本运行而不会超时。 – cappuccino 2010-06-26 08:08:44
您可以尝试使用两个脚本:第一个创建“锁定”文件,执行当前的cron脚本,然后删除“锁定”文件。所以即使你的当前cron脚本爆炸了,第一个脚本仍然会删除锁定。 我已经做过的另一件事是:如果脚本检测到“lock”文件存在,但filectime超过一个小时,则继续前进并将其删除,因为很可能出现问题。 – FlorianH 2010-06-26 09:43:40