Installation du plugin CronMailer sur un hébergement mutualisé OVH
Après la publication de notre plugin CronMailer qui permet d’envoyer des emails en différé par tâche Cron, nous allons voir comment l’installer sur un hébergement mutualisé chez OVH. Le gestionnaire de tâches planifiées, Crontab, est disponible sur toutes les offres sauf les anciennes Start et 1000gp. Un accès SSH est un plus, mais pas une obligation. Nous prendrons d’ailleurs l’exemple d’une offre Perso, l’une des plus petites proposées par l’hébergeur et qui ne dispose pas d’un accès SSH.
1. Quotas
Avant toute chose nous devons configurer le plugin en fonction des limitations imposées par OVH, que l’on peut retouver ici :
Règles et quotas d’OVH pour l’envoi d’e-mail par SMTP et le Web
Nous choisissons de limiter les envois à 100 à chaque exécution du shell, nous ouvrons donc le fichier APP/config/cron_mailer.php :
<?php $config['CronMailer'] = array( 'limit' => 100 ); ?>
2. Description de l’arborescence
Voyons comment sont organisés les fichiers sur le serveur, depuis la racine du compte :
cake_1.3.0 > le coeur de CakePHP cgi-bin config controllers libs locale models plugins |-- cron_mailer > le dossier du plugin requetes tests tmp vendors views www .forward app_controller.php app_model.php LISEZ-MOI
3. Un exécutable pour lancer la console et le shell
Notre plugin fonctionne grâce à un shell qui doit être lancé par la console. Or, chez OVH il n’est pas possible de placer des espaces dans la ligne de commande à faire exécuter par Crontab, nous ne pouvons donc pas écrire cake ... suivi des arguments comme nous le faisons en local pour travailler en ligne de commande. Nous devons créer un petit programme en bash qui va se charger d’appeler la console de CakePHP et de lancer le shell du plugin avec des arguments.
Nous créons un nouveau fichier dans APP/vendors/bash/cron_mailer avec le contenu suivant (à adapter selon les paramètres fournis par OVH) :
#!/bin/bash export PATH=$PATH:/homez.123/[nom du compte]/cake_1.3.0/cake/console cake cron_mailer -app /homez.123/[nom du compte]
Attention à bien enregistrer le fichier avec des sauts de ligne Linux !
Voyons ce que font ces 3 lignes :
- La première indique qu’il s’agit d’un fichier bash, à interpréter comme tel ;
- La deuxième ajoute le chemin vers la console à la variable PATH, sinon le script ne saura pas ou trouver la commande `cake`. Il faut changer `homez.123` et [nom du compte] par vos propres paramètres.
- La dernière ligne lance la console de CakePHP, avec comme argument le nom du shell fourni avec le plugin, et en option le chemin complet vers la racine de l’application, ici aussi à adapter à votre cas.
Nous pouvons maintenant uploader ce nouveau fichier sur le serveur via ftp, puis nous devons changer ses droits d’accès pour autoriser son exécution. Si nous avons accès au SSH, nous pouvons lancer chmod +x /vendors/bash/cron_mailer. Sans SSH, nous pouvons le faire dans le logiciel ftp, exemple avec FileZilla :

4. Configuration de la console
La manipulation qui va suivre n’est pas très « propre » puisqu’elle nous oblige à modifier un fichier du coeur de CakePHP, ce qui est généralement à proscrire. Cependant nous n’avons pas trouvé d’autre moyen pour faire fonctionner la console, c’est pourquoi nous la présentons tout de même.
Nous ouvrons le fichier cake_1.3.0/cake/console/cake :
#!/bin/bash ################################################################################ # # Bake is a shell script for running CakePHP bake script # PHP versions 4 and 5 # # CakePHP(tm) : Rapid Development Framework (http://cakephp.org) # Copyright 2005-2010, Cake Software Foundation, Inc. # # Licensed under The MIT License # Redistributions of files must retain the above copyright notice. # # @copyright Copyright 2005-2010, Cake Software Foundation, Inc. # @link http://cakephp.org CakePHP(tm) Project # @package cake # @subpackage cake.cake.console # @since CakePHP(tm) v 1.2.0.5012 # @license MIT License (http://www.opensource.org/licenses/mit-license.php) # ################################################################################ LIB=${0/%cake/} APP=`pwd` exec php -q ${LIB}cake.php -working "${APP}" "$@" exit;
En l’état, ce script bash qui lance la console est incapable de trouver l’exécutable PHP installé chez OVH, nous devons donc lui indiquer où le trouver. La ligne 24 devient :
exec /usr/local/bin/php.ORIG.5.2.6 -q ${LIB}cake.php -working "${APP}" "$@"
Nous uploadons ce fichier sur le serveur et nous lui donnons à lui aussi le droit d’être exécuté comme indiqué plus haut.
5. Configuration de la tâche planifiée
Nous pouvons maintenant nous connecter au manager OVH avec le Nic-handle et le mot de passe du compte. Nous nous rendons dans le menu Hébergement > Planificateur de tâches :

Nous créons une nouvelle tâche, avec les paramètres suivants :
- Description de la tâche : CronMailer
- Script à exécuter : /vendors/bash/cron_mailer
- Language du script : Autre (ce n’est pas du PHP mais du bash !)
- Logs par email : nous pouvons ici saisir une adresse email de contrôle, mais ce service est limité à l’envoi de 10 emails seulement.
- Activation : actif
- Puis nous réglons la périodicité par jours et par heures, avant de valider
C’est terminé, le shell devrait maintenant être lancé à la fréquence choisie.