
De nombreuses applications web ont besoin d’exécuter périodiquement des scripts pour réaliser des tâches automatiques : purge de logs, traitement de données, lancement de sauvegardes… Quand vous avez la main sur votre propre serveur, tout va bien : vous utilisez les crontabs. Mais quand vos applications sont hébergées sur un serveur mutualisé, c’est déjà moins accessible !
Heureusement certains hébergeurs proposent des solutions alternatives efficaces. C’est le cas d’OVH avec son Planificateur de tâches. Une aide officielle existe, mais sans être inexacte, elle est un peu rapide. Du coup, j’ai passé plus de temps que prévu pour que tout fonctionne à merveille. Voilà comment s’y prendre.
Préparer son script PHP
Première étape : préparer le script de traitement PHP qui sera appelé par la tâche planifiée. Pour que le serveur appelle le bon interpréteur (dans notre cas PHP), le script a besoin de le définir en première ligne. Il faut donc ajouter cette ligne à votre script PHP :
#!/usr/local/bin/php
Elle se place en tout premier. On obtient donc ceci :
#!/usr/local/bin/php <? // La suite de mon script PHP...
Si vous avez besoin d’appeler d’autres scripts PHP ou de manipuler des fichiers, n’oubliez pas de travailler avec des chemins absolus. Par exemple en utilisant une variable qui définit l’endroit où est placé votre script :
$path = dirname(__FILE__);
Une fois votre fichier PHP placé sur le serveur, il faut lui ajouter le droit d’exécution (avec votre outil FTP, par exemple). Par défaut, les droits des fichiers sont calés en lecture + écriture (604), vous devez obtenir les droits en lecture + écriture + exécution (705).
Planifier la tâche
Côté serveur, c’est fini. Maintenant, il faut planifier la tâche. Pour cela, nous passons par le Manager OVH (ou Espace client, depuis peu). Le Planificateur de tâches est caché derrière Mutualisé > Hébergement > Services web.

Lors de l’ajout d’une tâche, nous devons définir ses propriétés :
- Description de la tâche
- Script à exécuter (chemin depuis la racine FTP de votre espace mutualisé)
- Langage de script (avec le choix très important de la version de PHP à exécuter)
- Logs par e-mail (permet de recevoir par e-mail un log de l’exécution du script)
- Activation
- Périodicité
L’interface est si simple que je n’ai rien à expliquer !

Une fois validée, la tâche sera exécutée comme vous l’avez prévu. Enfin presque… Deux écarts constatés avec la théorie :
- La mise en place de la tâche planifiée est parfois longue (j’ai dû attendre plus de 24h sur un de mes sites avant de la voir tourner).
- Elle s’exécute rarement à l’heure prévue (la pile d’exécutions doit être longue, du coup j’atteins parfois des décalages de 20 à 30 minutes).
Suivre l’exécution de la tâche
Une fois tout ça en place, ça devrait tourner tout seul… Je suppose que vous testerez bien votre script d’abord, mais on n’est pas à l’abri de surprises à l’exécution. OVH vous offre donc les logs par e-mail ! La fonctionnalité est proposée dans le Planificateur de tâches et limitée à 10 envois (on peut la réactiver à la demande si besoin).
Vous recevrez alors un message du genre :
Vous avez demandé l'envoi des logs pour la tâche : Numéro : 123456 Heure de début : 2013-10-08 02:21:02 Heure de fin : 2013-10-08 02:21:19 Commande exécutée : /usr/local/bin/php.ORIG.4 -c /usr/local/lib/php.ini /[path]/[file].php Code de retour : 0 [...] -------------------------== Début ==------------------------- X-Powered-By: PHP/4.4.9 Content-type: text/html #!/usr/local/bin/php -------------------------== Fin ==-------------------------
Si tout se passe bien, rien de plus. Sinon, vous aurez une trace d’erreur. Un exemple avec un script qui tente une opération interdite sur un fichier gunzip :
-------------------------== Début ==------------------------- X-Powered-By: PHP/4.4.9 Content-type: text/html #!/usr/local/bin/php gzip: /[path]/toto.gz already exists; not overwritten -------------------------== Fin ==-------------------------
Et la sécurité ?
J’ai trouvé quelques didacticiels sur le Planificateur de tâches OVH. Certains sont très détaillés (encore plus qu’ici), mais aucun n’aborde le sujet de la sécurité. Pourtant, la question est vraiment capitale chez OVH. En effet, votre espace web sur le serveur mutualisé a pour objectif de diffuser des contenus publiquement sur le web. C’est sa fonction première ! Donc, si vous placez un script maladroitement sur votre serveur, d’autres pourront jouer avec.
Un exemple que j’ai vu : un dossier mysql
à la racine d’un site, contenant un script backup.php
qui génère un fichier dump.sql
au même endroit. Autant dire qu’il y a 99% de chances qu’un hacker du dimanche récupère vos données confidentielles dans l’année ! Remarquez que ce type de didacticiels n’est pas forcément innocent… Si 2000 personnes suivent l’exemple à la lettre, c’est d’autant plus facile pour des gens mal intentionnés. Lisez les didacticiels avec un peu de recul !
Parmi les règles de protection efficaces :
- placer votre script dans un dossier racine qui n’est pas couplé à un sous-domaine (donc inaccessible par le web)
- si votre fichier appartient à un dossier accessible sur le web, ajouter un fichier .htaccess pour interdire sa lecture et son exécution (directive
Deny from all
, par exemple)