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



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

问题是cronjob不时终止,共享服务器的服务台告诉我它不应该连续运行超过5秒。

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

  1. Cronjob不会等待PHP脚本完成它的工作
  2. 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在主机上运行的用户具有执行权限,则可以使用shell_exec和&让它运行一个后台进程,所以在你的PHP文件中这样做:shell_exec('/path/to/php /path/to/file >/dev/null 2>&1 &')

最新更新