Installer un cron chez 1and1

Cron ?

cron est le nom d’un programme qui permet aux utilisateurs des systèmes Unix d’exécuter automatiquement des scripts, des commandes ou des logiciels à une date et une heure spécifiées à l’avance, ou selon un cycle défini à l’avance.

http://fr.wikipedia.org/wiki/Cron

crontab est le nom du programme sous Unix (ou Linux) qui permet d’éditer des tables de configuration du programme cron.

http://fr.wikipedia.org/wiki/Crontab

L’autre jour, je m’amusais à installer un cron pour une petite appli  que je suis en train de développer.
Les crons, je connais, mais pas par coeur, et surtout pas la syntaxe. Comme j’installais ça chez 1and1, j’ai voulu bêtement suivre les instructions qu’ils donnaient. Evidemment, si je n’avais pas galéré pendant 3 jours, cette note de blog n’existerait pas…

Structure d’un cron

Pour commencer, je vous refais un cours vite fait sur la structure d’un cron. Vous aurez la même chose et mieux documenté ici.
Le fichier crontab est composé ainsi :
# m h dom mon dow command

  • m : minutes (0-59)
  • h : heures (0-23)
  • dom : day of month (1-31)
  • mon : month (1-12)
  • dow : day of week (0-6, 0 = dimanche, 1 = lundi, etc)
  • command : la commande à exécuter

Pour les minutes, heures, dom, dow et mois, plusieurs syntaxes sont possibles :

  • * : à chaque unité de temps
  • 5 : à chaque unité de temps 5 (j’ai mis 5, ça peut être n’importe quoi du moment que c’est dans l’intervalle 0-59 pour les minutes, 0-23 pour les heures…)
  • */5 : toutes les 5 unités de temps
  • 5,10 : les unités de temps 5 et 10
  • 5-10 : les unités de temps 5,6,7,8,9,10

C’est mieux avec des exemples (backup.sh est mon script de sauvegarde) :

5 * * * * backup.sh # backup.sh est exécuté toutes les heures passées de 5 minutes, tous les jours de tous les mois
*/5 * * * backup.sh # backup.sh est exécuté toutes les 5 minutes de toutes les heures, tous les jours, tous les mois
30 1 * * 6 # backup.sh est exécuté tous les samedi à 1h30
Inutile de préciser que la notation suivante est risquée :
* * * * * backup.sh # chaque minute de chaque heure...
La notation
30 1 * * * backup.sh >> log.txtou
30 1 * * * backup.sh > log.txtpermet de préciser que l’on souhaite que le résultat soit loggé dans le fichier log.txt. A défaut, le résultat de l’opération est envoyé par mail. Pour ne rien logger, spécifiez > /dev/null

Pendant ce temps-là, chez 1and1…

1and1 propose l’utilisation des crons à partir de leur pack pro. Les exemples donnés dans leur guide sont justes, mais ce ne sont pas des tutos, et les suivre aveuglément comme je l’ai fait, c’est s’exposer à ce que ça ne marche pas (ça m’apprendra, j’avais fait pareil pour SVN chez OVH).

Pour accéder au crontab, il faut se connecter en SSH sur l’hébergement, puis on peut éditer le fichier avec VI (de belles réjouissances en perspective…).
Pour vous connecter en SSH sous Windows, utilisez Putty. Pour utiliser VI, c’est par là (vous pouvez également suivre le tuto de 1and1).
Pour vos tests, je vous recommande chaudement de mettre en début de fichier
MAILTO=votre@adresse-email.com
A chaque exécution du cron vous serez prévenu du résultat.
Pour faire vos tests, mettez un intervalle de 5 minutes, c’est le minimum autorisé par l’hébergeur et ça vous évite d’attendre 24h entre deux tests.

Ça marche pas !

Bon, la première chose à faire quand on installe un cron, c’est d’appeler à la main le fichier qu’on veut exécuter avec le cron. Histoire de vérifier qu’il s’exécute bien, ça fait gagner du temps à tout le monde.
Ensuite, vérifiez les droits sur le fichier. Concrètement, si vous recevez un message « Permission denied », c’est que les droits ne sont pas bons. Vous pouvez modifier cela avec votre logiciel FTP ou en SSH. Un 777 devrait suffire 😉

Si vous appelez un fichier PHP
*/5 * * * * $HOME/test.php
vous aurez droit à :
?php: No such file or directory
syntax error near unexpected token blablabla

Le bougre n’a pas compris qu’il fallait interpréter PHP.

Essai suivant :
*/5 * * * * php $HOME/test.php
Normalement, y’a du mieux… sauf si
<b>Parse error</b>:  syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in ...
Bon, là c’est pas de pot, vous avez utilisé du PHP5, par défaut il attend du PHP4 (qui a dit « boulet » ?)
La bonne syntaxe est la suivante :
*/5 * * * * /usr/local/bin/php5 $HOME/test.php

Voilou, c’est à vous !

Commentaires

  1. Merci beaucoup pour cet article, étant novice au niveau de la gestion serveur, tu m’as vraiment éclairé sur le sujet.
    Par contre au niveau du mail dans la tâche Cron pour moi il n’acceptait pas le MAILTO: mais le MAILTO= chez 1&1

  2. Bonjour à tous,

    Merci Mariek ! ça fonctionne bien comme ça chez 1and1. Comment faire pour lancer CRON tous les jours à 12h15, j’ai pensé à faire => 15 12 * * * df >> /usr/local/bin/php5 $HOME/test.php (sans être sur de moi).

    Merci pour vos réponses.

  3. Merci … de m’avoir laissé espérer enfin comprendre la création de tâches cron chez 1and1…
    J’y ai déjà passé au moins une dizaine d’heures (je suis têtu), à essayer de programmer des sauvegardes régulières de mes site Joomla par Akeeba backup. Je ne comprends toujours pas ce qu’il faut faire concrètement, quand je suis connecté en SSH sur mon serveur 1and1.
    Putty est une usine à gaz nécessitant d’innombrables paramétrages et VI est un machin de programmeur pour programmeurs.

  4. @Phil21 : a priori c’est bien ça

    @Django : pour éditer le crontab, il faut utiliser un éditeur de texte. VI est le plus connu et il est installé de base ; sur certains serveurs joe et jane sont également installés. Oui, VI est difficile à prendre en main pour un non-développeur, mais encore une fois, c’est le plus répandu, ça vaut le coup de se familiariser avec lui. Tu trouveras une aide ici : http://jph.durand.free.fr/vi.htm. Quant à putty, je ne vois pas comment on peut le trouver usine à gaz, on le lance, on rentre l’adresse SSH et bam, on est sur le serveur… les options par défaut sont correctes, en général, sauf parfois l’encodage.

  5. Salut,
    j’ai galéré un moment, il y avait toujours une connerie qui ne fonctionnait pas.
    Ici j’ai trouvé la solution alors Merci Mariek, c’est sympa !

Les commentaires sont fermés.