递归调用cron作业

时间:2017-05-02 13:21:57

标签: php cron

我有一个三个PHP脚本,每天在服务器中运行两个作为单独的cron作业。 第一个脚本(get_products.php),对外部服务器进行curl调用以获取所有产品数据并将该数据存储在数据库中。请注意,每天约有10000种产品并且每天都在增加。

在第二个脚本(find_related.php)中,从第一个脚本存储的数据库中选择产品,执行一些操作并将操作数据存储在另一个数据库中。每个产品有10行,因此在这个数据库中有大约100000行。此脚本以cron身份运行。有时脚本没有完全执行,这就是为什么实际和期望的结果不会存储在数据库中。我在脚本中包含了这行代码:ini_set('max_execution_time','3600');
但它不起作用。

以下是此脚本中完成的过程: 通常任务是根据标签找到10个相关产品。我的数据库中存储了大约10300个产品。每次查询都会获取一个产品及其标签,并尝试随机查找一个标记有相同标签的产品作为主要产品,并将相关产品数据存储到另一个数据库中以获取第三个脚本。每个标签只允许使用一种产品。如果找不到总共10个相关产品,则随机从另一个名为bestseller_products的数据库中获取产品。 这是我的代码:

    $get_all_products = mysql_query('SELECT * FROM store_products');
    while($get_products_sql_res = mysql_fetch_array($get_all_products)){
    $related_products = array();
    $tags = explode(",",$get_products_sql_res['product_tags']);
    $product_id = $get_products_sql_res['product_id'];
    $product_handle = $get_products_sql_res['product_handle'];
    $get_products_sql = mysql_query('SELECT * FROM related_products WHERE product_handle="'.$product_handle.'"');
    if (mysql_num_rows($get_products_sql)==0)
    {
        $count = 0;
        foreach($tags as $t){
            $get_related_products_sql = mysql_query("SELECT product_handle, product_title, product_image FROM store_products WHERE product_tags like '%".$t."%' AND product_id != '".$product_id."' ORDER BY RAND()");
            if(!$get_related_products_sql){
                continue;   
            }
            while($get_related_products = mysql_fetch_array($get_related_products_sql) ){
                $related_product_title = mysql_real_escape_string($get_related_products['product_title']);
                $found = false;
                foreach($related_products as $r){
                    if($r['handle'] == $get_related_products['product_handle']){
                        $found = true;
                        break;  
                    }   
                }
                if($found == false){
                    $related_products[$count]['handle'] = $get_related_products['product_handle'];
                    mysql_query("INSERT INTO related_products (product_handle, product_id, related_product_title, related_product_image, related_product_handle) VALUES ('$product_handle','$product_id','$related_product_title', '$get_related_products[2]', '$get_related_products[0]')");
                    $count = $count + 1;    
                    break;  
                }
            }
        }
        if($count < 10){

            $bestseller_products = mysql_query("SELECT product_handle, product_title, product_image FROM bestseller_products WHERE product_id != '".$product_id."' ORDER BY RAND() LIMIT 10");
            while($bestseller_products_sql_res = mysql_fetch_array($bestseller_products)){
                if($count < 10){
                $found = false;
                $related_product_title = mysql_real_escape_string($bestseller_products_sql_res['product_title']);
                $related_product_handle = $bestseller_products_sql_res['product_handle'];
                foreach($related_products as $r){
                    if($r['handle'] == $related_product_handle){
                        $found = true;
                        break;  
                    }   
                }
                if($found == false){
                    $related_product_image = $bestseller_products_sql_res['product_image'];
                    mysql_query("INSERT INTO related_products (product_handle, product_id, related_product_title, related_product_image, related_product_handle) VALUES ('$product_handle','$product_id','$related_product_title', '$related_product_image', '$related_product_handle')");  
                    $count = $count + 1;
                }
                }
            }
        }
    }
}

第三个脚本(create_metafields.php),使用第二个脚本创建的数据在外部服务器中创建了元字段。同样的问题出现在第二个脚本中。

所以我想将第二个脚本分成几部分。我的意思是,不要在一次通话中处理所有10000种产品,而是想运行类似的部件(1-500,501-1000,1001-1500,..)。但是不想创建单独的cron作业。如果有人有解决方案,请建议。我真的需要弄明白。

提前致谢!

0 个答案:

没有答案