以非阻塞模式从cronjob执行PHP脚本
我正在使用cronjob在共享服务器上运行一个非常非常慢的PHP脚本。(该脚本执行一些HTTP请求,这些请求会不时暂停在服务器上的执行……它在约15-20秒内完成执行。) 问题是cronjob有时会终止,共享服务器的帮助台告诉我它不能连续运行超过5秒 所以我想(在开始认真的优化任务之前)执行脚本并在脚本继续运行时立即返回。到目前为止,我想了两种方法:以非阻塞模式从cronjob执行PHP脚本,php,cron,call,nonblocking,Php,Cron,Call,Nonblocking,我正在使用cronjob在共享服务器上运行一个非常非常慢的PHP脚本。(该脚本执行一些HTTP请求,这些请求会不时暂停在服务器上的执行……它在约15-20秒内完成执行。) 问题是cronjob有时会终止,共享服务器的帮助台告诉我它不能连续运行超过5秒 所以我想(在开始认真的优化任务之前)执行脚本并在脚本继续运行时立即返回。到目前为止,我想了两种方法: Cronjob不会等待PHP脚本完成它的工作 Cronjob将执行一个伪PHP脚本,该脚本将调用主PHP脚本并立即返回,而无需等待第二个脚本返回
使用我刚刚提出的可能解决方案进行编辑:
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次——这是一种我无法解释的现象(我的第一个脚本工作都是调用第二个脚本,但它没有)。与此同时,我想我已经找到了一个肮脏的解决方案,它是由我之前在谷歌上搜索的两个快照合成的(这两个快照都没有按原样工作),我将编辑我的第一条消息,也许它会帮助其他人,或者有人可以改进我的修复。