【问题标题】:Run PHP script every 5 minutes for 2 hours upon command根据命令每 5 分钟运行一次 PHP 脚本,持续 2 小时
【发布时间】:2013-10-20 13:23:27
【问题描述】:

标题的“根据命令”部分是必不可少的。我知道如何设置 cron 作业以在预定的时间安排运行 PHP 文件。我需要的东西本质上是相似的,但我认为它需要不同的技术解决方案。

我有一个管理部分,当我的一个管理员登录时,他们应该能够单击一个按钮,该按钮会在接下来的 2 小时内每 5 分钟执行一次 PHP 脚本。

现在按钮存在,它调用一个 Javascript 函数,该函数将 AJAX 请求发送到相应的 PHP 文件。如果可以告诉文件中的 PHP 函数从那一刻起每 5 分钟运行一次,直到 2 小时过去,我们的生活就会轻松很多。

我知道,通过让 Javascript 每 5 分钟重复一次请求,可以在客户端完成类似的操作。但是,这对我没有多大帮助。管理员需要能够离开站点,向具有不同参数的同一文件发送新请求,同时不中断 PHP 脚本的重复执行。

所以,我需要某种服务器端解决方案。这甚至可能吗?如果是这样,我该怎么办?

我可以共享客户端代码,但我认为这并不重要——客户端是标准的 AJAX 调用;在服务器端就是这样:

$par=$_GET['par'];    //parameter received from AJAX

someFunction($par);   //I need to modify the code so this function (please note there's a parameter) would run every 5 minutes for the next 2 hours

【问题讨论】:

  • 请参阅下面的@popnoodles 答案,我也会做类似的事情。

标签: php ajax


【解决方案1】:

JavaScript 解决方案要求管理员需要单击按钮,然后在接下来的 2 小时内保持该页面打开,这远非理想。我想这就是你不想要这个的原因。

这是一种方法

  • 当您的管理员单击按钮时,将日期和时间存储在数据库或文件中
  • 不管怎样,每 5 分钟运行一次 cron 作业
  • cron 作业做的第一件事是检查存储的日期时间是否 >= now - 2 hours
  • 如果不是,则自管理员上次按下按钮后已过去 2 小时,die()

如果另一个管理员单击该按钮,只需使用新值覆盖该作业的日期时间。自上次点击后,该作业将始终每 5 分钟运行 2 小时。

【讨论】:

  • 这似乎是一个简单而有效的解决方案。由于我也需要每个调用的参数,因此我也将其存储在数据库中。您是否发现在重叠时间间隔使用多个不同参数执行此操作有任何潜在问题?在这种情况下,cron 将遍历数据库,检查每一行并为存储日期 >= 现在 - 2 小时的所有行调用函数。
  • 是的,这就是我想避免使用客户端解决方案的原因,因为我这样做的最大原因是为了让管理员免于一直打开页面。
  • "您是否发现在重叠的时间间隔使用多个不同的参数执行此操作有任何潜在问题" 不,只需为该作业存储一个日期时间。如果另一个管理员单击该按钮,它会再次更新,并且自上次单击后始终运行 2 小时。除非您的意思是不同的管理员运行不同的工作。每项工作只需要一个日期时间。
【解决方案2】:

在您的 php 中使用 at shell 命令,以便它可以调用自己。然后使用php来管理它的调用次数或一次设置它们

【讨论】:

    猜你喜欢
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 2013-02-04
    • 2021-12-18
    • 2012-07-07
    • 1970-01-01
    • 2014-05-20
    相关资源
    最近更新 更多