我有一个cron脚本,可以抓取网站以获取新内容并将我需要的条目保存到数据库中。条目经过 md5 哈希和验证,以防止受骗。但是,我注意到有时会同时运行两个实例,并且哈希方法此时失败,因为我将每个预匹配项中的两个插入到数据库中。
有人可以推荐防止将来发生这种情况的最佳方法吗?
我已经考虑过通过检查日志文件来锁定执行,但在这种情况下,如果中间出现错误,脚本可能会被永久锁定。
我正在考虑设置 $_SESSION['lock'],所以在这种情况下,如果它锁定并中断,会话必然会在某个时候过期。
有什么想法吗?
我认为从 Web 服务器而不是命令行运行时应该保留$_SESSION
。
我会将上次活动时间存储在文件中。如果 cron 正常完成其工作,则删除该文件。
当 cron 脚本运行时,请检查文件。如果文件不存在,或者最后一个活动早于某个时间跨度,则继续执行,否则 - 停止。
这也很容易实现。
检查脚本是否应运行:
if(file_exists('lock.txt') && file_get_contents('lock.txt') > (time() - 60)){
die('Should not run!');
}
记录某些脚本生命周期点上的活动:
file_put_contents('lock.txt', time());