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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行cron作业时出现网关超时错误相关的知识,希望对你有一定的参考价值。

任何人都可以建议在共享软件上运行cron作业时出现网关超时504错误的任何解决方案。我已经尝试过睡眠功能,但它没有用,我有以下功能的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 IlluminateHttpRequest();
        foreach($chunks as $ids){
            foreach($ids as $id){
                $request->replace(['id' => $id]);
                $rep = $this->getOrderStatusFromAPI($request);
            }
            sleep(10);
        }
    }

getOrderStatusFromAPI()函数调用第三方API来获取一些记录。 checkOrderStatus()函数当前在每个cron调用中获取大约300条记录。请建议除服务器升级之外的任何解决方案非常感谢!!

答案

您的问题有多种解决方案。如果您正在使用带有FastCGI的nginx,请尝试:

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配置中的更改

最后,在我们的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

以上是关于运行cron作业时出现网关超时错误的主要内容,如果未能解决你的问题,请参考以下文章

cron 运行网站备份 google drive api 脚本时出现“无效授权”错误

Perl在使用警报超时时出现分段错误

从 Dynamics 365 运行自定义工作流时出现 2 分钟超时问题

AWS - 错误 504 - 网关超时 - Flask 应用程序

在 Heroku 上运行 firebase node.js 时出现错误 R10(启动超时)

错误代码:从 Azure 流分析作业中采样数据时出现 BadArgument 错误消息