Chapitre 15 · 15.1
Tâches CRON : exécuter automatiquement des tâches
Regardez la vidéo explicative
Une tâche cron (ou cronjob) est une commande que le serveur exécute pour vous à des moments fixes. Par exemple, un script qui nettoie chaque nuit les anciennes données, une liaison horaire avec votre comptabilité, ou les tâches planifiées de WordPress ou Laravel. Vous configurez cela sous Tâches CRON, dans Fonctionnalités avancées.

Règles chez WebOké
Un serveur est partagé avec d'autres sites web. C'est pourquoi des règles s'appliquent aux tâches cron :
- Ne faites démarrer une tâche qu'une fois toutes les 10 minutes au maximum. C'est ce que nous demandons à tout le monde. Le serveur ne l'impose pas techniquement, mais une tâche qui s'exécute plus souvent ralentit le serveur pour vous comme pour les autres. Si vous avez plusieurs tâches, ne les faites pas toutes démarrer au même moment.
- Gardez une tâche courte. S'il y a beaucoup à faire, répartissez le travail sur plusieurs passages.
Créer une tâche
- Dans DirectAdmin, sous Fonctionnalités avancées, cliquez sur Tâches CRON.
- Cliquez sur AJOUTER UNE TÂCHE CRON.
- Indiquez dans Minute, Heure, Jour du mois, Mois et Jour de la semaine quand la tâche doit s'exécuter (1). Un astérisque * signifie "chaque".
- Sous les champs horaires, vous voyez à La tâche cron s'exécutera : (2) en langage clair quand la tâche s'exécutera. Vérifiez cela.
- Saisissez dans Commande (3) ce qui doit se produire, avec des chemins complets (voir ci-dessous).
- Vous ne voulez pas de mail à chaque exécution ? Cliquez sur ÉVITER LES E-MAILS (4).
- Cliquez sur CRÉER (5).

La tâche apparaît ensuite dans la liste. Pour la supprimer, cochez-la (1) et cliquez sur Supprimer.

Exemples d'horaires
| Minute | Heure | Jour du mois | Mois | Jour de la semaine | Signification |
|---|---|---|---|---|---|
| 30 | 3 | * | * | * | Chaque jour à 03h30 |
| */10 | * | * | * | * | Toutes les 10 minutes |
| 0 | * | * | * | * | Toutes les heures pleines |
| 15 | 8 | * | * | 1-5 | En semaine à 08h15 (1 est lundi, 0 ou 7 est dimanche) |
| 0 | 2 | 1 | * | * | Le premier jour de chaque mois à 02h00 |
Vous pouvez séparer les valeurs par des virgules (1,15,30), indiquer une plage avec un tiret (5-7) et un intervalle avec */ (*/2 signifie un sur deux). Privilégiez un horaire calme et aléatoire, comme 03h17 plutôt que minuit pile.
La commande : chemins complets
Une tâche cron ne sait pas dans quel dossier elle doit démarrer. Utilisez donc toujours des chemins complets. Votre hébergement se trouve sur le serveur dans /home/ suivi de votre nom d'utilisateur DA (voir Votre nom de serveur et votre nom d'utilisateur DA retrouver).
Lancer un script PHP :
/usr/local/bin/php /home/nomutilisateur/domains/votredomaine.nl/public_html/tache.php
Cela utilise la même version de PHP que votre site, c'est à dire la version définie dans Select PHP version (voir Choisir la version de PHP (Select PHP version)).
Appeler une adresse web (par exemple si votre logiciel fournit une URL cron) :
curl --silent https://www.votredomaine.nl/cron.php > /dev/null
WordPress : par défaut, WordPress lance ses tâches planifiées lorsqu'un visiteur arrive sur le site. Pour un site très fréquenté ou un site avec peu de visites, il est préférable d'utiliser une tâche cron. Ajoutez alors dans wp-config.php define('DISABLE_WP_CRON', true); et créez une tâche qui lance toutes les 15 minutes /usr/local/bin/php /home/nomutilisateur/domains/votredomaine.nl/public_html/wp-cron.php.
Laravel : /usr/local/bin/php /home/nomutilisateur/domains/votredomaine.nl/artisan schedule:run. Attention : schedule:run n'exécute que les tâches qui correspondent exactement au moment de la tâche cron. Si la tâche cron s'exécute toutes les 10 minutes, une tâche planifiée à 08h05 ne se lancera jamais.
Mail après chaque tâche
Si une tâche produit un résultat (texte ou message d'erreur), le serveur peut l'envoyer par mail. Cela n'arrive que si vous avez configuré une adresse. Vous avez trois possibilités :
- Mail vers votre propre adresse : cliquez sur ENVOYER TOUS LES RÉSULTATS CRON À UN E-MAIL, indiquez une adresse e-mail et cliquez sur ENREGISTRER. Cela s'applique à toutes vos tâches. Si vous laissez le champ vide, aucun mail n'est envoyé.
- Pas de mail pour une seule tâche : cliquez sur ÉVITER LES E-MAILS lors de la création. >/dev/null 2>&1 est alors ajouté à la fin de votre commande et le résultat de cette tâche disparaît, même si vous avez configuré une adresse.
- Résultat dans un fichier journal : ajoutez à la fin de votre commande >> /home/nomutilisateur/cron-log.txt 2>&1. Vous pourrez ensuite consulter dans le Gestionnaire de fichiers ce que la tâche a fait. Nettoyez ce fichier de temps en temps.

Astuce : configurez une adresse tant que vous testez une nouvelle tâche. Vous voyez ainsi immédiatement si elle fonctionne. Désactivez-la ensuite ou envoyez le résultat vers un fichier journal. Les mails des tâches cron comptent dans la limite d'envoi de votre pack (voir Limites d'envoi et le message « message limit reached »).
Questions fréquentes
Ma tâche affiche "Could not open input file".
Le chemin vers le script est incorrect. Vérifiez le chemin complet dans le Gestionnaire de fichiers : il commence par /home/nomutilisateur/domains/.
Mon script fonctionne dans le navigateur, mais pas en tant que tâche cron.
Un script exécuté via cron ne sait pas sous quel site web il s'exécute : $_SERVER['SERVER_NAME'] et $_SERVER['DOCUMENT_ROOT'] sont vides et les chemins relatifs dans include fonctionnent différemment. Utilisez des chemins complets dans le script, ou appelez le script via curl avec l'adresse web.
Puis-je voir quand une tâche s'est exécutée ?
DirectAdmin ne garde pas cet historique pour vous. Faites donc écrire le résultat de la tâche dans un fichier journal, avec la date incluse (par exemple date >> /home/nomutilisateur/cron-log.txt comme première commande, séparée par ;).
À quoi sert Lancer @reboot ?
Dans ce cas, la tâche ne s'exécute que lorsque le serveur redémarre, et non à des horaires fixes. Vous n'en avez presque jamais besoin pour un site web.
