以非阻塞模式从cronjob执行PHP脚本

以非阻塞模式从cronjob执行PHP脚本,php,cron,call,nonblocking,Php,Cron,Call,Nonblocking,我正在使用cronjob在共享服务器上运行一个非常非常慢的PHP脚本。(该脚本执行一些HTTP请求,这些请求会不时暂停在服务器上的执行……它在约15-20秒内完成执行。) 问题是cronjob有时会终止,共享服务器的帮助台告诉我它不能连续运行超过5秒 所以我想(在开始认真的优化任务之前)执行脚本并在脚本继续运行时立即返回。到目前为止,我想了两种方法: Cronjob不会等待PHP脚本完成它的工作 Cronjob将执行一个伪PHP脚本,该脚本将调用主PHP脚本并立即返回,而无需等待第二个脚本返回

我正在使用cronjob在共享服务器上运行一个非常非常慢的PHP脚本。(该脚本执行一些HTTP请求,这些请求会不时暂停在服务器上的执行……它在约15-20秒内完成执行。)

问题是cronjob有时会终止,共享服务器的帮助台告诉我它不能连续运行超过5秒

所以我想(在开始认真的优化任务之前)执行脚本并在脚本继续运行时立即返回。到目前为止,我想了两种方法:

  • Cronjob不会等待PHP脚本完成它的工作
  • Cronjob将执行一个伪PHP脚本,该脚本将调用主PHP脚本并立即返回,而无需等待第二个脚本返回
  • 我在网上读过这两个选项,尤其是在这个网站上,但没有找到真正有效的方法:如果第一个脚本立即完成,multi_curl就什么都做不了

    提前谢谢


    使用我刚刚提出的可能解决方案进行编辑:

    header("Content-Length: 0");
    header("Connection: close");
    flush();
    
    $mainUrl = 'mySecondScript.php';
    
    $active= null;
    $mch = curl_multi_init();  
    $ch1 = curl_init($mainUrl);
    curl_setopt($ch1, CURLOPT_HEADER, 0);
    
    curl_multi_add_handle($mch, $ch1);  
    $resultCurl = curl_multi_exec($mch, $active);  
    
    do {
    $resultCurl = curl_multi_exec($mch, $active);
    } while ($resultCurl == CURLM_CALL_MULTI_PERFORM);
    

    它可能类似于您在这里或在网络上的任何其他地方熟悉的代码-但如果我像其他人为我编写的那样使用它,它将无法工作-仅此而已

    如果在您的主机上运行的用户PHP具有执行权限,您可以使用和&使其运行后台进程,因此在您的PHP文件中类似这样:
    shell\u exec('/path/to/PHP/path/to/file>/dev/null 2>&1&')

    谢谢Michoel,我以前试过,由于某种原因,它导致调用我的第一个脚本的循环次数达到了50次——这是一种我无法解释的现象(我的第一个脚本工作都是调用第二个脚本,但它没有)。与此同时,我想我已经找到了一个肮脏的解决方案,它是由我之前在谷歌上搜索的两个快照合成的(这两个快照都没有按原样工作),我将编辑我的第一条消息,也许它会帮助其他人,或者有人可以改进我的修复。