【问题标题】:automatically schedule a php script execution at specific time [duplicate]在特定时间自动安排php脚本执行[重复]
【发布时间】:2013-03-23 11:53:27
【问题描述】:

我正在开发一个需要事件的网络应用程序。用户在特定时间创建事件,我需要执行脚本并在确切时间激活事件,以便事件可以开始。 关于如何做到这一点的任何想法?我用谷歌搜索并通过堆栈溢出搜索,但我遇到的只是在特定时间多次执行。我需要的是在自动设定的时间执行。 希望你能帮助我,我很绝望。

【问题讨论】:

  • 在你所有的谷歌搜索中,你从未遇到过cron
  • Cron 作业。 Goooooogle 他们:)
  • 我做了,但正如我在下面评论的那样,我不确定我是否可以安装 cron 作业
  • 在寻找替代方案之前先找出来怎么样
  • 好的,我试试看 :) 能否请您发布 cron 作业的下载链接?

标签: php mysql events scheduled-tasks


【解决方案1】:

您有 3 个选项。我的建议:尽可能使用 cron,如果必须,使用用户驱动,最后使用守护进程。

(1) cron(如 cmets 中所述)

cron 是用于 linux 系统的调度程序,它将在您的系统上运行命令行作业。你通过 ssh 登录你的服务器,输入crontab -e,然后添加如下一行:

4 5 * * * php /path/to/my/script.php

这将在每天凌晨 5:04 运行脚本。

<?php
// /path/to/my/script.php

// Do something

一些托管服务允许使用 GUI 输入 cron 作业。还有外部 cron 服务,会在特定时间为您调用 URL。

(2) 守护进程

这是最高级的选项,也是最不可靠的选项:您运行一个包含无限循环的命令行脚本。然后脚本会定期检查状态并做出响应。因为它可能在运行几个月后崩溃,所以你必须有第二个脚本来重新启动它以防万一。这是很多工作,但它是最灵活的方法。

<?php



while (1) {   

  // fetch $last_exec_timestamp from database

  if ($last_exec_timestamp < time() + 86400) {
    // set last_exec_timestamp to now in database

    // do something
  }
  sleep(5);

}

3.用户驱动

如果您的网站上有大量流量,您可以在没有更多输出时在页脚中简单地添加作业 this。确保此代码速度很快,否则不幸的用户将等待它。

<?php

// fetch $last_exec_timestamp from database

if ($last_exec_timestamp < time() + 86400) {
  // set last_exec_timestamp to now in database
  // do something
}

我还没有在another stack overflow question 中亲自测试过更多奇特的“用户驱动”方法。

【讨论】:

  • 您可能会补充说,cron 有 Windows 和 Mac 替代品
  • 另一个选项是 MySQL EVENTS - dev.mysql.com/doc/refman/5.6/en/create-event.html
  • 非常感谢!我想我会使用用户驱动的方法,毕竟这不是很重要的事情,必须在服务器端解决:)
  • 让我们尝试用户驱动,我只需要在特定时间发送“1”或“0”。
【解决方案2】:

【讨论】:

  • 我不确定是否可以在服务器上安装 cron 作业,是否有替代方案?
猜你喜欢
  • 2011-02-15
  • 2010-12-31
  • 2018-07-16
  • 1970-01-01
  • 2011-07-05
  • 2013-11-27
  • 1970-01-01
  • 2020-09-28
  • 2018-06-05
相关资源
最近更新 更多