2

我有一个 cron 脚本,它可以在网站上搜索新内容并将我需要的条目保存到数据库中。条目经过 md5 散列和验证,以防止被骗。但是我注意到有时会同时运行两个事件,并且哈希方法此时失败,因为我将每个 pregmatches 中的两个插入到 DB 中。

有人可以推荐最好的方法来防止这种情况在未来发生。

我曾考虑通过检查日志文件来锁定执行,但在这种情况下,如果中间出现错误,脚本可能会被永久锁定。

我正在研究设置 $_SESSION['lock'],所以在这种情况下,如果它锁定并中断,会话肯定会在某个时候过期。

有任何想法吗?

4

1 回答 1

1

我认为$_SESSION从 Web 服务器而不是命令行运行时应该保留它。

我会将上次活动时间存储在文件中。如果 cron 正常完成其工作,则删除该文件。

当 cron 脚本运行时,检查文件。如果文件不存在,或者最后一个活动早于某个时间跨度,则继续执行,否则 - 停止。

这也很容易实现。

检查脚本是否应该运行:

if(file_exists('lock.txt') && file_get_contents('lock.txt') > (time() - 60)){
   die('Should not run!');
}

记录某些脚本生命周期点的活动:

file_put_contents('lock.txt', time());
于 2013-09-26T14:37:29.577 回答