【问题标题】:Using Cron to check and reboot a PHP script使用 Cron 检查并重启 PHP 脚本
【发布时间】:2013-07-06 23:52:39
【问题描述】:

我有一个脚本,它将连续运行 while() 循环,execute.php。它最初会通过 Cron 触发,在某个时间开始,然后运行 ​​while 循环(定期休眠),直到我们达到预定的结束时间,该时间将由详细说明开始和结束时间的 MySQL 表控制。

在脚本的每个循环中,我都会将当前时间戳放入数据库表中。我希望 Cron 任务每 5 分钟左右运行一次,并确保脚本没有崩溃,如果有,然后重新访问 execute.php 并重新启动它。显然我可以设置一个 Cron 任务来运行类似于 check.php 的东西,它只是检查时间戳表并确保它不超过 2 分钟左右,但是我如何让该脚本重新启动 execute.php?

我能想到的唯一解决方案是让 check.php 提前几秒钟安排一个新的 Cron 任务来运行 execute.php,但这似乎很笨拙。问题的症结在于:有没有办法让一个 PHP 脚本在这种情况下运行另一个?

谢谢。

【问题讨论】:

    标签: php cron


    【解决方案1】:

    您可以将整个锁定逻辑移动到您的 php 脚本中。由于您已经拥有所需的一切(数据库凭据、带有表名的配置文件......),只需像这样构建它:

    1. 连接数据库、加载设置等...
    2. 检查上次更新时间与当前时间的差异
    3. 如果够新鲜,exit
      如果while() 不够新鲜

    如果您可以在服务器上安装诸如monitgod 之类的东西,或者您可以简单地将init 与重生线一起使用,则有各种守护程序管理软件。

    【讨论】:

    • 我不明白,如果 execute.php 因任何原因崩溃,它如何照顾自己?肯定有一些与它完全无关的外部进程需要检查它是否仍然正常工作?
    • 不需要,cron 会定期启动它,如果它确实崩溃了,它将重新启动,否则只会退出新的,旧的会像以前一样运行。如果你有 cron 每 5 分钟启动一次,这意味着你最多有 5 分钟的“离线”时间。
    • 是的,这是有道理的,我们让它在开始和结束时间之间每 5 分钟运行一次,而不是让 Cron 只启动一次任务。这里唯一的问题是如果它在执行过程中重新运行脚本怎么办?每个循环可能会持续 10 秒,因为会完成很多工作,如果中途再次触发,它不会破坏一切吗?
    • 如果不知道自己在做什么,就很难说清楚。在最好的情况下,你的工作是幂等的,如果它完成两次也没关系。如果您可以使其具有事务性,那也可以。在最坏的情况下,您可能必须进行清理。对于初学者来说,每项工作都有一个位标志,它会指示它是否完成,并让标志改变你最后做的事情。
    猜你喜欢
    • 1970-01-01
    • 2018-08-26
    • 2016-09-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2017-08-25
    相关资源
    最近更新 更多