2012-11-02 2 views
3

J'ai ce problème étrange lorsque je lance un cronjob d'importation dans made. Il traite un fichier XML de 1,5 Go contenant environ 400 000 produits. Le script fonctionne bien et prendrait plusieurs heures à compléter, mais après environ 500/600 secondes, je reçois l'email suivant de la cron-deamon.Connexion réinitialisée par un pair après 500 secondes

PHP Warning: file_get_contents (http://test.nl/admin/cron_index.php?route=module/EZImport & Cron): failed to open stream: HTTP demande a échoué! HTTP/1.1 500 Internal Server Error dans /home/test.nl/public_html/admin/controller/tool/EZImport_cron.php en ligne 8

Attention: file_get_contents (http://test.nl/admin/cron_index .php? route = module/EZImport & cron): Impossible d'ouvrir le flux: la requête HTTP a échoué! HTTP/1.1 500 Erreur interne Server dans /home/test.nl/public_html/admin/controller/tool/EZImport_cron.php sur la ligne 8 bool (false)

Mes apache erreur-journaux disent:

[ven 2 novembre 2012 09:43:39] [warn] [client 176.9..174] (104) Connexion réinitialisée par les pairs: mod_fcgid: données de lecture d'erreur du serveur FastCGI [ven 2 novembre 09h43 : 39 2012] [error] [client 176.9..174] fin prématurée des en-têtes de script: cron_index.php

Ceci est le fichier cron appelé par le cronjob

 

    require_once('../../config.php'); 
    $opts = array('http' => 
     array('timeout' => 36000) 
    ); 
    $context = stream_context_create($opts); 
    $url = HTTP_SERVER."cron_index.php?route=module/cronMod&cron"; 
    $result = file_get_contents($url, false, $context); 
    var_dump($result); 
    die(); 

je dois exécuter ce Cron via file_get_contents

Environnement:

DEBIAN, OpenCart

Le temps d'exécution max en webmin (php config) est défini sur 36000 secondes.

+0

mod_fcgid (et son module apache2 équivalent) est vraiment pas fait pour l'exécution de ces tâches à vie longue.Bien que vous spécifiez que vous avez besoin d'exécuter ce cron en utilisant votre méthode 'file_get_contents', vous devriez envisager de changer votre travail cron pour utiliser la version CLI de PHP qui ne souffre pas des délais imposés par les autres SAPI. –

Répondre

0

Essayez d'utiliser set_time_limit(0) dans le script ou modifier la limite de temps dans php.ini

+0

J'ai ajouté 'set_time_limit (0)' à l'index et au fichier appelé via file_get, la limite de temps dans php.ini est fixée à 30sec, donc le réglage effectué dans webmin annule que – FlyingNimbus

1

traite un fichier XML 1.5GB

Erk, c'est un peu stupide - vous avez besoin d'un minimum de 2 passe pour vérifier le document est bien formé et il y a plein de possibilités de mauvaises choses se passent.

Le temps d'exécution maximum dans webmin (config php) est fixé à 36000 secondes

Pour quelle extrémité?

Vous devez également configurer le délai d'attente pour le serveur Web et tous les autres composants de la chaîne entre le client et le serveur, mais essayer de transférer un fichier de 1,5 Gb via HTTP est tout simplement idiot - vous pouvez le faire fonctionner. la bonne façon de résoudre le problème. Brisez-le en morceaux plus maniables.

+0

je ne transfère pas le fichier XML sur HTTP , Je télécharge ce fichier dans le script appelé par le file_get_contents comme un zip de 50mb. Aussi, j'utilise XMLReader donc je ne vais pas charger le tout dans la RAM. – FlyingNimbus

Questions connexes