在达到一定时间之前安全退出申请?

时间:2013-08-02 00:11:07

标签: php

我在cron中每10分钟运行一次脚本,并希望脚本在9分钟后退出以停止任何重叠。

脚本正在运行foreach循环,轮询收件箱并在收件箱中的每条消息上运行一系列功能。

我知道我可以使用set_time_limit但是如果脚本运行的时间超过9分钟,那么在循环结束时寻找更优雅的方法来退出脚本。

3 个答案:

答案 0 :(得分:3)

如果我理解您的需要,您需要防止并行运行相同的脚本。 正确解决方案是实现锁定或队列机制,因此相同的脚本不会并行运行。

你可以使用文件| db |记忆锁。文件是最简单的 1.检查锁定文件是否存在 2.如果存在 3.等待X秒 - >转到1
4.创建文件
5.继续你的脚本
... ... 6.脚本结束 - >删除文件。

将此逻辑放在使用此锁的每个脚本中。 你也不能创建/删除文件,而是修改其中的内容(比如在1和0之间切换)

答案 1 :(得分:2)

你不想在工作的一半时间关闭工作(除非代码中出现故障并且你想要中止......但这不是每天的用例)

您需要单身人士管理。例如,在启动时将令牌转为“正在运行”,然后在退出时将其转为“未运行”(不要忘记错误管理)。因此,当作业的第二次迭代尝试重叠时,测试令牌可以让您知道它是否应该运行。

您可以使用数据库令牌或文件令牌等。

答案 2 :(得分:2)

这不是真正做事的方式,但如果必须,这是一个建议:

在代码顶部记下开始时间,然后在每次迭代结束时检查:

$start_time = time();

{start execution loop}

// Do your stuff here

if ((time() - $start_time) > (9*60)) {   // execution time in seconds
  exit;
}

{go around again}

您最好找到一种方法来确保代码在可用时间内完成,或阻止第二个实例在第一个实例完成之前启动。