Christophe Le Bot

  • Navigation rapide
Pratique de la conception numérique

Derniers commentaires

  • Une excellente thèse sur Simile Exhibit
    • Olivier Rossel | Bonjour. Malgre les annees, avez vous toujours en memoire vos usages d’Exhibit? Je serais ravi d’en discuter avec vous. Cordialement, Olivier Rossel.
  • Utiliser le planificateur de tâches OVH (crontab) avec PHP
    • Max | Bonjour, comme faire pour appeler une version de PHP qui n’est plus proposée par défaut dans le manager ? J’essaie de lancer un cron avec php 5.3 mais le log affiche No such file...
    • Christophe | @absolument Merci pour ces précisions. Je n’ai pas mis en place de tâches cron récemment, mais j’ai reçu quelques notifications étranges d’OVH il y a quelques...
  • Récupérer le dernier auto-incrément MySQL avec PHP
    • Thy | Sujet toujours *très* utile en 2015 ! Je réponds à Serge tsimba qui récupère un « Resource id ». (Et à tous ceux qui ont le même souci mais qui ne le disent pas) :)...
  • Régler l’heure de serveurs virtuels sous Debian
    • Ares_XL | Il semble que sur Débian la commande « tzconfig &ra quo; soit dépréciée et remplacée par : « dpkg-reconfigure tzdata » elle donne accès à une...
 

Utiliser le planificateur de tâches OVH (crontab) avec PHP

Site web OVH

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.

Manager OVH - Crontab

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 !

Propriétés d'une tâche planifiée OVH

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)