首页 文章

通过wget / curl长时间的cron工作?

提问于
浏览
3

我正在为我的php应用程序开发cron作业,并计划通过wget / curl使用cron . 我的一些php cron工作可能需要2-3个小时 . 如何让php从cron tab工作2-3个小时?通过cron wget / curl运行如此长时间的工作是一种好习惯吗?有人有经验吗?我也有电子邮件队列,我需要每10秒运行一次,但cron选项卡是分钟级别的 . 对此案有何建议?

谢谢阅读 .

3 回答

  • 2

    当您使用wget / curl时,您正在从Web服务器请求页面 . 每个网络服务器都有一个超时期限,因此可能会超时 .

    此外,一些托管服务提供商可能会停止运行超过某些分钟(主要是为了控制流氓线程) .

    因此,如果作业需要超过几分钟,则不建议使用wget / curl .

    尝试使用实际调度程序安排它 . 您可以从命令行运行php

    php [options] [-f] [ - ] [args ...]

    php命令应该在路径上 .

  • 4

    您可以在脚本开头使用以下命令告诉PHP实际上永远不会超时:

    set_time_limit(0);
    

    更明智的是,如果crontab每24小时运行一次脚本,则将超时设置为24小时,这样就不会同时运行两个副本 .

    set_time_limit(24*60*60);
    

    Crontab只允许分钟级执行,因为这是您应该真正启动脚本的最常见的 - 启动/关闭成本使得更快速的调度效率低下 .

    如果您的应用程序需要每10秒检查一个队列,则更好的策略可能是使用一个长时间运行的脚本来执行该检查,并偶尔使用sleep()来阻止自己占用系统资源 .

    在UNIX系统上,这样的脚本应该真正作为守护进程运行 - 看看PEAR System_Daemon包,看看如何简单地完成它 .

  • 2

    我刚刚通过cron和wget执行了一个长期运行的PHP脚本 . 由于wget中的默认超时,脚本在15分钟后终止 .

    但是我相信如果你设置正确的超时,这种方法确实有效 . 您运行的PHP脚本需要设置为具有无限的运行时间 . 最好在长时间运行的脚本开始时设置它 .

    set_time_limit(0);
    

    使用wget时,还需要通过传递-T0来删除其超时 . 例如

    wget -q0 -T0 http://yourhost/job.php
    

    请注意不要使用长时间运行的脚本使服务器过载 .

相关问题