加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP脚本的Cron作业,需要非常长的执行时间

发布时间:2020-12-13 13:34:44 所属栏目:PHP教程 来源:网络整理
导读:我有一个php脚本作为cron作业运行,它执行一组简单的任务,为数据库中的每个用户循环,大约需要30分钟才能完成.这个过程每小时开始一次,需要尽可能快速有效.我遇到的问题,就像任何服务器脚本一样,执行时间各不相同,我需要找出最佳的cron时间设置. 如果我每分钟
我有一个php脚本作为cron作业运行,它执行一组简单的任务,为数据库中的每个用户循环,大约需要30分钟才能完成.这个过程每小时开始一次,需要尽可能快速有效.我遇到的问题,就像任何服务器脚本一样,执行时间各不相同,我需要找出最佳的cron时间设置.

如果我每分钟运行一次cron,我需要在分钟结束前20秒停止脚本的最后一个循环,以确保当前循环及时完成.在一个小时的过程中,这会浪费很多时间.

我想知道简单地删除php执行时间限制并且每小时运行一次脚本并让它运行完成是一个坏主意….这是一个坏主意吗?

假设您希望尽快完成工作,请不要使用cron. Cron适用于需要在特定时间发生的事情.它经常被滥用来模拟后台流程,这个流程一旦工作出现就会理想地处理工作.你应该写一个持续运行的守护进程. (注意:您还可以查看消息/工作队列类型系统,还有很好的库可以执行此操作)

您可以使用pcntl functions从头开始编写一个守护进程(因为您不关心多个工作进程,在后台运行进程是super-easy.),或作弊并创建一个永远运行的脚本并通过screen运行它,或利用一些像PEAR的System:Daemon或nanoserv这样的实体库代码

一旦守护进程得到处理,你真正关心的就是拥有一个永远运行的循环.您需要注意您的脚本不会泄漏内存或消耗太多资源.

通常,您可以执行以下操作:

<?PHP
// some setup code 
while(true){
    $todo = figureOutIfIHaveWorkToDo();
    foreach($todo as $something){
        //do stuff with $something
        //remember to clean up resources so you don't leak memory!
        usleep(/*some integer*/);
    }
    usleep(/* some other integer */); 
}

它会很好地工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读