Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每5分钟在服务器上执行一次php脚本_Php_Mysql_Cron - Fatal编程技术网

每5分钟在服务器上执行一次php脚本

每5分钟在服务器上执行一次php脚本,php,mysql,cron,Php,Mysql,Cron,我想每5分钟运行一个php脚本,处理一些简单的mysql查询以识别潜在的错误,如果错误被记录为数据库条目,php脚本将发送一封电子邮件 根据我的研究,似乎cron作业(或任务调度器)通常负责在指定时间运行脚本,但是我在使用的托管服务中找不到这个选项(运行“Parallels-Plesk Panel 11.0.9”作为我可以访问的管理界面) 因此,我尝试了以下“伎俩”: 要激活脚本,我输入url(“…/alert.php?a=1”)。这在几分钟内可以正常工作,但是在2或3分钟后脚本似乎停止执行

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

根据我的研究,似乎cron作业(或任务调度器)通常负责在指定时间运行脚本,但是我在使用的托管服务中找不到这个选项(运行“Parallels-Plesk Panel 11.0.9”作为我可以访问的管理界面)

因此,我尝试了以下“伎俩”:


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

您知道如何防止脚本停止,或者如何实现每5分钟自动执行一次脚本(而不能够访问cron作业)的其他建议吗

谢谢

试试这个解决方案:

<?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)

有一个
max\u execution\u time
参数,如果花费的时间太长,会停止脚本,默认情况下为30秒,请参阅文档-

您可以尝试在脚本开头执行
set\u time\u limit(0)
(请参阅),或者更改
max\u execution\u time
参数本身


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

托管服务将保护其服务器免受长时间运行的脚本过载的影响,并将配置一个超时,在该超时之后,这些脚本将被中止(特别是请参见和max_execution_time

如果您的电脑可以保持开机状态,另一种解决方案是让它每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>

setTimeout(函数(){window.location.reload();},5*60*1000);
//只需显示当前时间戳即可查看上次刷新的时间。
文件。写入(新日期());

您正在运行的主机肯定已为长时间运行的脚本配置了超时,以防止其过载。请查看您的主机解决方案规范。有些不允许使用cron,尤其是免费的cron。但是,有一些允许使用cron。您最好的解决方案可能是简单地找到一个支持cron的主机,这就是我遇到这个问题时所做的。同样,主机可能会阻止您的脚本运行。如果您使用的是共享主机,则没有办法。从浏览器执行的脚本遵循php.ini执行时间限制。感谢您的建议-非常有魅力,我有一台备用电脑来完成这项工作!如果你没有备用电脑,另一种方法是每5分钟为你提供一个免费的网站,比如ping脚本。
<?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>