在特定时间自动安排php脚本执行

时间:2013-04-02 08:51:49

标签: php mysql events scheduled-tasks

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

2 个答案:

答案 0 :(得分:8)

您有3个选项。我的建议:如果可以,请使用cron,如果必须,请使用用户驱动程序,并将守护程序作为最后的手段。

(1)cron(如评论中所述)

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。用户驱动

如果您的网站上拥有相当数量的流量,那么只要没有更多输出,您就可以在页脚中包含这个作业。确保此代码快速,或者不幸的用户将等待它。

<?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中测试过“用户驱动”的更多花哨方法。

答案 1 :(得分:1)