Pourquoi le module cronJob ne fonctionne-t-il pas avec les mutus OVH ?


  • administrators

    J'ai remarqué que depuis mars 2015 les tâches cron ne se lançaient plus sur mon hébergement OVH, une solution ?


  • administrators

    On ne connait pas la cause, peut-être parce que le cloud étant hébergé chez OVH également cela pose des conflits ou que trop d'appels arrivent en même temps.

    Voici une solution qui fonctionne et vous permet d'utiliser le module natif.

    Allez dans le module cronJob de Prestashop et rentrez vos urls

    Choisissez le mode avancé et copiez l'adresse de l'url.

    Créez un fichier appelé "cron.php" à la racine de l'admin de votre shop

    Dans celui-ci vous mettez:

        <?php /* 
        ** Changez cette variable en true ou false pour que le cron
        ** affiche quelque chose - ceci apparaît dans les log de la 
        ** console
        */
        $verbose = true;
        
        /*
        ** Remplacez l'url http://.... avec celle présente
        ** sur l'écran de configuration du module cronjobs
        ** après avoir activé le mode avancé
        */
        $cronjob_url = <<< EOT
        http://www.votre_site/adminXXXX/index.php?controller=AdminCronJobs&token=a0c6f12c14a4a96b3937e7fda7182ebe
        EOT;
        
        /**************************************
        ** Ne rien modifier après cette ligne **
        ***************************************/
        error_reporting(E_ALL);
        $break_line = (php_sapi_name() == "cli") ? PHP_EOL : '<br/?>
    ';
        $output = $verbose ? $break_line.'Cron Report of '.date('c').$break_line.$break_line : ''; 
        
        $cronjob_url = trim($cronjob_url);
        $ch = curl_init($cronjob_url);
        curl_setopt($ch, CURLOPT_URL, $cronjob_url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        
        $data = curl_exec($ch);
        
        if ($verbose) {
            if($data)
                $output .= 'Ok'.$break_line.$data;
            else 
                $output .= 'Failed';
        }
        curl_close($ch);
        
        die($output);
    

    en remplaçant évidemment 'http://www.votre_sit...937e7fda7182ebe' par l'url indiquée dans le module.

    Mettez toutes vos tâches en exécution: réglez les heures, jours, correspondant à leur usage.

    Dans votre panel OVH, tâches planifiées créez une nouvelle tâche:

    • Adresse (dépend de la structure de votre ftp) :
    • Si votre boutique est dans www, www/votre_repertoire_admin/cron.php
    • Si vous êtes dans un sous-répertoire, www/votre_répertoire_prestashop/votre_repertoire_admin/cron.php
    • Si vous êtes dans un répertoire adjacent à www, votre_répertoire_prestashop/votre_repertoire_admin/cron.php
    • Nom de la tache: cron Prestashop
    • Version php : 5.4
    • Log par email (si vous en voulez)
    • Fréquence: Tous les jours et toutes les heures du jour

    Validez

    Votre script sera exécuté toutes les heures et déclenchera les tâches planifiées dans cronjobs.

    Vous pouvez tester en mode http en allant à l'url: http://votre_boutique.com/adminXXX/cron.php

    Si votre site est en https, modifiez l'url en conséquence.


  • legacy

    Merci beaucoup pour cette solution, cela m'a aidé a corriger un problème de synchronisation du module amazon market place sur ovh.


  • legacy

    Vous pouvez utiliser tout crontab externe (comme easycron.com), qui commence les processus sur l'URL et quelques PrestaShop modules cron emplois tutoriels à https://www.easycron.com/cron-job-tutorials, espère l'aide.



  • Bonjour,

    J'ai essayé de mettre en place ton script mais j'ai une adresse en https (Certificat Let's Enscrypt). J'ai toujours un retour en failed. Est-ce que tu peux m'aider ?



  • Bonjour,

    Si je remplace la ligne ;
    http://www.votre_site/adminXXXX/index.php?controller=AdminCronJobs&token=a0c6f12c14a4a96b3937e7fda7182ebe

    par celle-ci : * * * * * /usr/bin/flock -n /tmp/mmo_process_import.lockfile /usr/bin/curl https://xxxxxx.fr/modules/ps_mmoconnector/processImportCron.php >> /home/xxxxxx/www/modules/ps_mmoconnector/logs/process_import_cron.log
    7 */1 * * * /usr/bin/flock -n /tmp/mmo_cache_clean.lockfile /home/xxxxxx/www/modules/ps_mmoconnector/cache_clean >> /home/xxxxxx/www/modules/ps_mmoconnector/logs/cache_clean.log
    15 0 * * * /usr/bin/flock -n /tmp/mmo_update_product.lockfile /usr/bin/curl https://xxxxxxxx.fr/modules/ps_mmoconnector/updateProductURLsCron.php >> /home/xxxxxxx/www/modules/ps_mmoconnector/logs/update_product_urls_cron.log

    Est-ce que ça va fonctionner ?
    Mon fournisseur me demande de lancer cette tâche ... Je suis chez OVH et un peu perdu...
    Merci pour toute aide

    EDIT modération: suppression des urls réèlles


  • administrators

    Le module cronjob est un module web, par construction il est seulement capable d'exécuter des requêtes web avec les contraintes liées.

    Ce que votre interlocuteur vous demande est d'exécuter une commande système.
    Cette commande fait d'ailleurs appel à la commande flock qui n'est pas sûr d'être permise dans un univers mutualisé.
    De plus votre commande me fait peur, elle s'execute via le web (donc n'importe qui peut la lancer) mais ne contient pas de protection pour s'assurer que vous êtes seul à pouvoir l'exécuter.

    Afin d'éviter qu'un petit malin lance une attaque de type DOS sur votre site, j'ai modifié votre url
    Faire une demande urgente au développeur du module pour mettre en place un minimum de sécurité.

    Vous avez peut-être une petite chance de faire fonctionner votre tâche, mais seulement via le vrai cron, donc pas au travers du module cronjobs, mais via les tâches planifié de OVH



  • @doekia Merci pour tout



  • @eolia J'ai testé ce code, ça donne : Parse error: syntax error, unexpected end of file in CODE on line 42
    Errors parsing CODE
    c'est normal ?
    (un copier coller sur le site https://fr.piliapp.com/php-syntax-check/ )



  • Par contre, celui ne révèle aucune erreur de syntaxe :

    <?php

    /*
    ** Changez cette variable en true ou false pour que le cron
    ** affiche quelque chose - ceci apparaît dans les log de la
    ** console
    */
    $verbose = true;

    /*

    ** sur l'écran de configuration du module cronjobs
    ** après avoir activé le mode avancé
    */
    $cronjob_url = <<< EOT
    https://xxxxx.fr/admin1234/index.php?controller=AdminCronJobs&token=xxxxxxxxxxxxxxxxxxxxxxxxxxxx
    EOT;

    /**************************************
    ** Ne rien modifier après cette ligne **
    ***************************************/
    error_reporting(E_ALL);
    $break_line = (php_sapi_name() == "cli") ? PHP_EOL : '<br/>';
    $output = $verbose ? $break_line.'Cron Report of '.date('c').$break_line.$break_line : '';

    $cronjob_url = trim($cronjob_url);
    $ch = curl_init($cronjob_url);
    curl_setopt($ch, CURLOPT_URL, $cronjob_url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

    $data = curl_exec($ch);

    if ($verbose) {
    if($data)
    $output .= 'Ok'.$break_line.$data;
    else
    $output .= 'Failed';
    }
    curl_close($ch);

    die($output);


  • administrators

    Pour la dernière fois!
    Ne pas mettre les url exacte de ton BO et/ou de tes crons avec leurs tokens de sécurité sur un forum public



  • Bonjour,
    J'étais plein d'espoir en trouvant votre code pour créer un fichier cron.php mais ça ne marche pas pour moi ... j'ai dû raté qqchose !
    Mon site est en PS 1.6.1.17
    serveur : OVH mutualisé

    j'ai créé le fichier, créé la tâche cron chez OVH avec la CMD ./www/adminXXX/cron.php (j'ai même testé de mettre le fichier cron directement à la racine www/) mais rien ne se passe.
    Ni qd je colle directement le chemin du fichier dans la barre d'adresse .... https://ascenseurvegetal.com/adminXXXX/cron.php (ou directement à la racine www)

    Dois-je changer le code pour PS 1.6 ? ou la version php (5.6 sur le serveur...) ?

    Merci d'avance pour vos lumières

    Régis L


  • administrators

    @rp-lemaire Quand vous le testez depuis le navigateur, quel est la réponse ? Page blanche ?



  • Bonsoir,
    Oui, c'est bien ça ... (je n'ai pas activé les messages d'erreur, et je ne sais pas si ça changerais qqch ...)
    Par contre j'ai fait un test avec un fichier du même nom, mais qui m'envoie un mail (+ simple à coder ...). ça marche si je le colle à la racine www/ : https://ascenseurvegetal.com/cron.php (pas si je le colle dans /adminXXX/ ...
    J'ai fait un copié collé du code ci-dessus, je n'ai pas oublié une ligne lors de la sélection ...
    J'ai collé l'URL du cron de Prestashop dans croono.com : ça marche ...

    Je ne suis vraiment pas capable de juger mais il me semble que cela vient du code ... ;-(
    il doit y avoir qqch d'incompatible avec ma config

    RL



  • Bonjour Eolia,

    Un grand merci pour ce tuto et surtout le code PHP.
    Par contre, attention à propos de ce code, il y a des espaces/tabulations à chaque ligne => erreur de syntaxe quand on le colle dans un éditeur de texte comme PHPDesigner. Il faut les supprimer pour qu'il n'y ait plus d'erreur.

    Je voulais savoir : j'ai plusieurs taches à exécuter avec des liens cibles/URL différents et à des fréquences différentes. Du coup, j'ai créé plusieurs fichiers PHP (en reprenant à chaque fois votre code PHP) et je les ai tous mis (sur mon FTP) dans un dossier appelé taches_cron
    Ensuite, je suis allé dans l'Espace client OVH > Hébergement > [Nom du site] onglet Plus + > Taches planifiées - Cron et j'ai créé une tache cron par fichier dans mon dossier taches_cron avec le chemin www/taches_cron/[nom_du_fichier].php
    Est-ce que cela va fonctionner, ou faut-il obligatoirement mettre le(s) fichier(s) PHP des tâches CRON dans le dossier admin de ma boutique ?

    Autre question (là ça n'est pas le cas mais) : si on a plusieurs taches cron qui s'exécutent à la même fréquence mais avec des liens cible/URL différents, est-ce qu'on doit créer autant de fichier PHP que de tâches cron ou est-ce qu'on peut mettre plusieurs liens cible/URL à la suite dans le fichier PHP ?
    Exemple :

    $cronjob_url = <<< EOT
    http://www.votre_site/adminXXXX/fichier1.php?controller=AdminCronJobs&token=a0c6f12c14a4a96b3937e7fda7182ebe
    http://www.votre_site/adminXXXX/fichier2.php?controller=AdminCronJobs&token=a0c6f12c14a4a96b3937e7fda7182ebe
    http://www.votre_site/adminXXXX/fichier3.php?controller=AdminCronJobs&token=a0c6f12c14a4a96b3937e7fda7182ebe
    EOT;
    

    D'avance merci pour votre réponse.
    Bonne journée ;-)


  • administrators

    @spip93
    Le topic a pour but de pouvoir exécuter le module cronjobs de prestashop.
    Une fois ce dernier opérationnel il est habituel d'alors configurer les taches planifiées via ce module.


Se connecter pour répondre
 

Il semble que votre connexion ait été perdue, veuillez patienter pendant que nous vous re-connectons.