运行cron作业时网关超时错误

时间:2018-09-19 13:08:04

标签: php laravel-5 cron

在共享主机上运行cron作业时,谁能为网关超时504 错误提出任何解决方案。我尝试了 sleep 功能,但是没有用,我对cron作业有以下功能-

public function checkOrderStatus(){
        $orders = Order::select('id')
                    ->whereNotIn('status', ['COMPLETED', 'CANCELLED', 'PARTIAL', 'REFUNDED'])
                    ->where('api_order_id', '!=', null)
                    ->orderBy('id', 'desc')
                    ->pluck('id')
                    ->toArray();

        $collection = collect($orders);

        $chunks = $collection->chunk(20);

        $request = new \Illuminate\Http\Request();
        foreach($chunks as $ids){
            foreach($ids as $id){
                $request->replace(['id' => $id]);
                $rep = $this->getOrderStatusFromAPI($request);
            }
            sleep(10);
        }
    }

getOrderStatusFromAPI()函数调用第三方API来获取一些记录。 checkOrderStatus()函数当前在每个cron调用中获取约300条记录。除服务器升级外,请提出其他解决方案。非常感谢!!

1 个答案:

答案 0 :(得分:0)

您的问题有多种解决方案。如果您将NGINX与FastCGI结合使用,请尝试:

php.ini中的更改

尝试在php.ini文件中提高max_execution_time设置(CentOS路径为/etc/php.ini):

max_execution_time = 150

PHP-FPM中的更改

尝试在php.ini文件中提高request_terminate_timeout设置(CentOS路径为/etc/php-fpm.d):

request_terminate_timeout = 150

Nginx Config中的更改

最后,在我们的Nginx虚拟主机配置中添加fastcgi_read_timeout变量:

location ~* \.php$ {
    include         fastcgi_params;
    fastcgi_index   index.php;
    fastcgi_read_timeout 150;
    fastcgi_pass    127.0.0.1:9000;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
}

重新加载PHP-FPM和Nginx:

service php–fpm restart
service nginx restart