我有一个cron脚本会抓取一个网站来获取新内容并将我需要的条目保存到数据库中。条目是md5经过哈希和验证,以防止欺骗。但是我注意到有时会同时运行两次,并且此时哈希方法失败,因为我将每个pregmatch中的两个插入到DB中。
有人可以推荐最好的方法来防止将来发生这种情况。
我已经考虑通过检查日志文件来锁定执行,但在这种情况下,如果中间出现错误,脚本可能会被永久锁定。
我正在考虑设置$ _SESSION ['lock'],所以在这种情况下,如果它锁定和中断,会话必然会在某个时候到期。
有什么想法吗?
答案 0 :(得分:1)
我认为从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());