CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 11-01-2017 16:52:41

fourmizen
Fraisier
Date d'inscription: 15-02-2011
Messages: 81

Cake 3 CronShell

Bonjour à tous,

je tente de passer par le shel de cake pour envoyer des mails en Cron. Je m'y prends peut être comme un manche mais voilà, ca ne marche pas.

le shell qui lance la console et appelé par mon cron chez OVH dans webroot :

Code: php

  1. #!/bin/bash
  2.  
  3. /homez.181/xxx/yyy/bin/cake cron weekly

Extrait de mon log de cron :

Code: php

  1. [2017-01-11 16:28:03] ## OVH ## START - 2017-01-11 16:28:03.230678 executing: /usr/local/php7.0/bin/php /homez.181/xxx/./yyy/webroot/cron.sh
  2. [2017-01-11 16:28:03]
  3. [2017-01-11 16:28:03] /homez.181/xxx/yyy/bin/cake cron weekly
  4. [2017-01-11 16:28:03]
  5. [2017-01-11 16:28:03] ## OVH ## END - 2017-01-11 16:28:03.275734 exitcode: 0
  6. [2017-01-11 16:28:03]
  7. [2017-01-11 16:28:03] ## OVH ## Your job could not be initiated for an unknown reason. Please contact customer support for more information.
  8. [2017-01-11 16:28:03] ## OVH ## END - 2017-01-11 16:28:03.276524 exitcode: 255

Le cron se lance et s’exécute bien (exitcode : 0) puis problème (exitcode : 255)

Mon shell :

Code: php

  1. <?php
  2.  
  3. namespace App\Shell;
  4.  
  5. use Cake\Console\Shell;
  6. use Cake\Mailer\Email;
  7.  
  8. class CronShell extends Shell {
  9.  
  10.     public function weekly() {
  11.         $this->log("weekly debut");
  12.  
  13.  
  14.         $this->loadModel('Quotes');
  15.         $this->loadModel('Subscribers');
  16.  
  17.         $languages = array('en', 'fr');
  18.  
  19.         foreach ($languages as $lang) {
  20.             $query = $this->Quotes->find('all')
  21.             ->where(array('language' => $lang))
  22.             ->contain(array('Authors'));
  23.             $quotes = $query->toArray();
  24.             $subscribers = $this->Subscribers->find('all')
  25.             ->where(array('language' => $lang, 'weekly' => 1));
  26.             $this->log("weekly before subscribers");
  27.  
  28.             foreach ($subscribers as $subscriber) {
  29.                 $quote = $quotes[array_rand($quotes)];
  30.                 $email = new Email();
  31.                 $email->template('weekly', 'default')
  32.                     ->emailFormat('html')
  33.                     ->from(['noreply@learning-quotes.com' => 'Learning Quotes'])
  34.                     ->to($subscriber->mail)
  35.                     ->subject('Learning Quotes weekly')
  36.                     ->viewVars(array('title' => 'Learning Quotes weekly',
  37.                                      'mail' => $subscriber->mail,
  38.                                      'quote_id' => $quote->id,
  39.                                      'quote' => $quote->text,
  40.                                      'author' => $quote->author->name))
  41.                     ->send();
  42.                             $this->log("weekly send");
  43.  
  44.             }
  45.         }
  46.     }
  47. }

qui fonctionne bien quand je le mets dans un controller et que je lance par url. les logs ne fonctionnent pas par contre. Je les ai mis pour débuguer rapidement.

Tous ces fichiers on des permissions 705. Une idée de l'origine du problème ? Merci pour votre aide !

Hors ligne

 

#2 29-01-2017 11:29:14

cyberbobjr
Baker
Date d'inscription: 13-07-2010
Messages: 625

Re: Cake 3 CronShell

Salut,
il y'a quelque chose de bizarre dans le lancement de ton cron. D'un coté je vois que c'est un shell bash, mais quand je vois la console OVH je vois qu'il lance un PHP pour exécuter ton shell bash :

Code: php

  1. /usr/local/php7.0/bin/php /homez.181/xxx/./yyy/webroot/cron.sh

Perso, chez planethoster, quand je veux créer un cron dans la console, j'exécute directement mon CakeShell en ligne de commande :

Code: php

  1. /usr/local/php7.0/bin/php /homez.181/xxx/yyy/bin/cake.php cron weekly

sans passer par un script bash.

++
bob


Développeur freelance et disponible, contactez-moi en privé.
Mon blog CakePHP : http://caketuts.key-conseil.fr

Hors ligne

 

#3 29-01-2017 15:21:54

fourmizen
Fraisier
Date d'inscription: 15-02-2011
Messages: 81

Re: Cake 3 CronShell

En fait OVH n'accepte pas les paramètres comme ca pour un fichier php (en tout cas pour mon niveau de compte).

Mais j'ai résolu mon problème en appelant un script php qui fait un curl. Pas super secure mais ca fonctionne smile

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr