【问题标题】:Execute php script on server every 5 minutes每 5 分钟在服务器上执行 php 脚本
【发布时间】:2016-02-10 16:09:39
【问题描述】:

我想每 5 分钟运行一次 php 脚本,处理一些简单的 mysql 查询以识别潜在错误,如果错误被记录为数据库条目,则 php 脚本会发送一封电子邮件。

根据我的研究,似乎 cron 作业(或任务调度程序)通常负责在指定时间运行脚本,但是我在我正在使用的托管服务(运行“Parallels Plesk Panel 11.0. 9”作为我可以访问的管理界面)。

因此我尝试了以下“技巧”:

<?php
$active = $_GET["a"];
set_time_limit(0);
while($active == 1){
    include 'alert_exe.php';
    sleep(300); // execute script every 5 mins
}
?>

要激活脚本,我输入 url (".../alert.php?a=1")。这可以正常运行几分钟,但脚本似乎在 2 或 3 分钟后停止执行。

知道如何防止脚本停止或替代建议如何实现每 5 分钟自动执行一次脚本(无法访问 cron 作业)?

谢谢!

【问题讨论】:

  • 您正在运行的主机肯定为长时间运行的脚本配置了超时,以防止其过载。
  • 查看您的托管解决方案规范。有些不允许使用 cron,尤其是免费的。然而,有一些允许 crons。您最好的解决方案可能是简单地找到一个支持 crons 的主机,这就是我遇到此问题时所做的。同样,主机可能会阻止您的脚本运行。
  • 如果您在共享主机上,则没有办法。从浏览器执行的脚本遵循 php.ini 执行时间限制。

标签: php mysql cron


【解决方案1】:

托管服务会保护其服务器免于因长时间运行的脚本而超载,并会配置超时,之后此类脚本将被中止(请参阅PHP: Runtime Configuration Settingsma​​x_execution_time强烈> 特别是)。

如果您的 PC 可以保持开机状态,另一种解决方案是让它每 5 分钟向服务器发送一次请求:

<?php
    // Your PHP code that has to be executed every 5 minutes comes here
?>
<script>
setTimeout(function () { window.location.reload(); }, 5*60*1000);
// just show current time stamp to see time of last refresh.
document.write(new Date());
</script>

【讨论】:

  • 感谢您的建议 - 工作就像一个魅力,我有一台备用电脑来完成这项工作!
  • 如果您身边没有备用 PC,另一种方法是创建一个免费网站,例如 uptimerobot.com,每 5 分钟为您发送一次脚本。
【解决方案2】:

有一个max_execution_time 参数可以在脚本耗时过长时停止脚本,默认为 30 秒,请参阅文档 - http://php.net/manual/en/info.configuration.php#ini.max-execution-time

您可以尝试在脚本开头使用set_time_limit(0)(请参阅http://php.net/manual/en/function.set-time-limit.php),或更改max_execution_time 参数本身。

但总的来说,我不会采用这样的解决方案,它不是很可靠。最好找到一个可以使用cron 的主机,或者您可以尝试寻找一些外部服务,该服务将每 5 分钟 ping 一次您的脚本(可能您可以使用监控 Web 应用程序运行状况的服务)。

【讨论】:

    【解决方案3】:

    试试这个解决方案:

    <?php
    $interval=5; //minutes
    set_time_limit(0);
    while (true)
    {
    $now=time();
    include("alert_exe.php");
    sleep($interval*05-(time()-$now));
    }
    ?>
    

    通过重新启动 apache 来停止脚本,或者从您的内部脚本中构建一个返回值,该值将 while (true) 更改为 while (false)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-28
      • 2014-05-20
      • 2021-08-06
      • 1970-01-01
      • 2016-11-21
      • 2023-04-04
      • 2015-12-31
      • 1970-01-01
      相关资源
      最近更新 更多