Dédié chez OVH: Exécuter des tâches PHP par Cron sous Plesk

Pour avoir un petit peu patiné avec les tâches cron sur mon nouveau dédié chez OVH qui est sous Plesk (sur une base Linux), voici un petit post sur la démarche à suivre.

Où trouver les taches cron sous Plesk?

Les taches cron se trouvent dans l’onglet Serveur sous le nom « Tâches planifiées » sous Plesk. Pour ajouter une tâche, vous devez choisir qui l’exécutera (utilisez « root » si vous ne savez pas exactement quelles seront les différences) et définir la tâche à effectuer.

Appeler PHP dans son cron

Vous remarquerez vite que la syntaxe * * * * * * php /crons/ma-fonction.php ne fonctionnera pas.

Pour appeler PHP vous devez définir le chemin complet: /usr/bin/php

Ce qui donnerait du coup quelque chose comme: * * * * * /usr/bin/php /crons/ma-fonction.php

Spécifier le chemin d’accès complet du script PHP

Une fois de plus votre tâche cron ne devrait pas fonctionner puisque le chemin d’accès au script PHP n’est pas le bon.

Le chemin d’accès à votre fichier doit être de la forme: /var/www/vhosts/nsXXXXX.ovh.net/dossieralaracinedevotreFTP/crons/ma-fonction.php

nsXXXXX: Le nom de votre sous domaine chez OVH (celui sur lequel est votre admin Plesk)

Pour connaître le chemin exact de votre fonction PHP, vous pouvez utiliser la fonction dirname(__FILE__) (si la fonction est accessible via HTTP mettez un simple echo dirname(__FILE__); dans votre fonction pour en afficher le chemin exact d’accès, sinon utilisez par exemple la fonction mail().

Au final, votre tâche cron devrait ressembler à ceci:

* * * * * /usr/bin/php /var/www/vhosts/nsXXXXX.ovh.net/dossieralaracinedevotreFTP/crons/ma-fonction.php

(avec un espace après /php)

Edit: Les erreurs sur le include dans vos scripts PHP exécutés par cron

Dernier petit problème auquel vous pourrez être confrontés: Votre script PHP fonctionne très bien quand vous y accédez via HTTP mais refuse de s’exécuter lorsque la tache est programmée sous cron.

Le problème peut venir d’un include dont le chemin d’accès aurait été mal défini dans votre script.

Cron nécessite, en effet, un chemin d’accès absolu.

Ainsi, si vous aviez un include de la forme include(‘../incl/config.php’) préférez la formulation suivante:

$base = dirname(dirname(__FILE__));
include_once($base . ‘/incl/config.php’);

Cet exemple suppose que le dossier contenant votre script ait le même dossier mère que le dossier contenant votre fichier de configuration.

ex:

/applications/cron/votre_script.php

/applications/incl/config.php

 

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *