💻 Serveur & shell

Tâches planifiées (cron & crontab)

Planifier l'exécution automatique de scripts via Plesk ou en ligne de commande : syntaxe crontab, exemples concrets, debug, bonnes pratiques.

débutant ⏱ 10 min Mise à jour : 2026-04-23

Un cron (ou tâche planifiée) exécute automatiquement une commande à intervalle régulier : sauvegarde nocturne, envoi de newsletter, régénération de cache, tâches WP-Cron, etc. Sur nos hébergements mutualisés Plesk, vous gérez vos crons depuis l'interface. Sur un VPS, vous disposez en plus de la commande crontab.

Créer un cron depuis Plesk

L'interface Plesk est le moyen le plus simple pour la plupart des besoins — pas de risque de casser la syntaxe et les logs sont centralisés.

  1. Connectez-vous à votre espace Plesk.
  2. Dans la colonne de droite, cliquez sur Tâches planifiées (ou Scheduled Tasks).
  3. Cliquez sur Ajouter une tâche.
  4. Choisissez le type :
    • Exécuter une commande — pour un script shell ou une commande système.
    • Récupérer une URL — Plesk exécutera un wget/curl sur l'URL (utile pour déclencher un cron WordPress via HTTP).
    • Exécuter un script PHP — Plesk exécute le script avec la version PHP de l'abonnement.
  5. Définissez la fréquence (champs graphiques ou expression cron avancée).
  6. Cochez Notifier si vous voulez un email en cas de sortie non vide (voir plus bas).
💡
Tester avant de planifier
Utilisez le bouton Exécuter maintenant de Plesk : la tâche tourne immédiatement et affiche stdout/stderr. Indispensable pour valider un chemin ou une commande avant de la laisser partir en production.

Syntaxe crontab

Une ligne crontab contient 5 champs de temps, puis la commande :

┌───────────── minute        (0-59)
│ ┌─────────── heure          (0-23)
│ │ ┌───────── jour du mois   (1-31)
│ │ │ ┌─────── mois           (1-12)
│ │ │ │ ┌───── jour semaine   (0-6, 0 = dimanche)
│ │ │ │ │
* * * * * commande à exécuter

Caractères spéciaux

  • * — toutes les valeurs possibles.
  • */n — tous les n (ex : */15 sur la minute = toutes les 15 min).
  • a-b — plage (ex : 9-17 sur l'heure = de 9 h à 17 h).
  • a,b,c — liste (ex : 1,15 sur le jour du mois = les 1er et 15).

Exemples courants

ExpressionSignification
*/5 * * * *Toutes les 5 minutes
0 * * * *Chaque heure pile
0 2 * * *Tous les jours à 2 h du matin
30 3 * * 1Chaque lundi à 3 h 30
0 0 1 * *Le 1er de chaque mois à minuit
0 9-18 * * 1-5Toutes les heures, 9 h-18 h, lundi-vendredi

Vous avez un doute sur une expression ? crontab.guru la traduit en langage naturel.

Crontab en ligne de commande (VPS)

Sur un VPS ou un serveur dédié, vous pouvez éditer directement la crontab de votre utilisateur.

# Éditer sa propre crontab
crontab -e

# Lister les tâches planifiées
crontab -l

# Supprimer toute la crontab (attention, pas de confirmation)
crontab -r

crontab -e ouvre l'éditeur par défaut (nano ou vi). Ajoutez une ligne par tâche. À la sauvegarde, cron recharge automatiquement la configuration.

Exemple de crontab complète

# Variables (utile pour PATH, MAILTO)
MAILTO=admin@exemple.fr
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# Sauvegarde quotidienne à 3 h
0 3 * * * /home/user/scripts/backup.sh

# Vidage du cache toutes les heures
0 * * * * php /var/www/site/bin/clear-cache.php

# Rapport hebdomadaire le lundi à 8 h
0 8 * * 1 /home/user/scripts/weekly-report.sh

Bonnes pratiques

1. Utiliser des chemins absolus

Cron ne connaît ni votre $PATH ni votre répertoire courant. Toujours préciser le chemin complet des commandes et des fichiers.

# ❌ Ne marchera probablement pas
* * * * * php script.php

# ✅ Correct
* * * * * /usr/bin/php /home/user/scripts/script.php

Pour trouver le chemin d'une commande : which php, which node, etc.

2. Rediriger la sortie

Par défaut, toute sortie (stdout et stderr) est envoyée par mail à l'utilisateur via MAILTO. Trois stratégies :

# Tout écrire dans un log
0 3 * * * /chemin/script.sh >> /home/user/logs/cron.log 2>&1

# Rien écrire du tout (silencieux)
0 3 * * * /chemin/script.sh > /dev/null 2>&1

# Garder uniquement les erreurs
0 3 * * * /chemin/script.sh > /dev/null
Bon à savoir
2>&1 signifie « redirige stderr vers la même destination que stdout ». À placer après la redirection principale.

3. Éviter les chevauchements

Si une tâche lente tourne toutes les minutes, deux instances peuvent se chevaucher. Utilisez flock pour garantir une exécution unique :

* * * * * /usr/bin/flock -n /tmp/mon-script.lock /chemin/script.sh

L'option -n fait échouer immédiatement si le verrou est déjà pris.

4. Tester la commande hors cron

Avant de planifier, exécutez la commande exacte dans votre shell avec le même utilisateur. Si elle fonctionne là, elle fonctionnera en cron — à condition de respecter les points 1 et 2.

WordPress : désactiver wp-cron.php et passer en vrai cron

Par défaut, WordPress déclenche ses tâches planifiées via wp-cron.php à chaque visite du site. Sur un site à faible trafic, les tâches prennent du retard ; sur un site à fort trafic, c'est un gaspillage CPU. La bonne pratique : désactiver ce comportement et utiliser un vrai cron système.

Dans wp-config.php, ajoutez avant la ligne /* That's all, stop editing! */ :

define('DISABLE_WP_CRON', true);

Puis planifiez un cron toutes les 5 minutes qui appelle wp-cron.php :

*/5 * * * * /usr/bin/wget -q -O - https://exemple.fr/wp-cron.php?doing_wp_cron > /dev/null 2>&1

Ou, encore mieux, via WP-CLI (plus propre, pas de requête HTTP) :

*/5 * * * * cd /var/www/site && /usr/local/bin/wp cron event run --due-now > /dev/null 2>&1

Debug : mon cron ne s'exécute pas

⚠️
Les causes les plus fréquentes
  1. Chemin relatif au lieu d'absolu.
  2. Variable d'environnement manquante (ex : $HOME, clé API).
  3. Permissions insuffisantes sur le script (oubli du chmod +x).
  4. Shebang manquant ou incorrect dans un script (#!/bin/bash).
  5. Fuseau horaire différent de celui attendu.

Consulter les logs cron

Sur Debian/Ubuntu, les exécutions cron sont tracées dans syslog :

# Dernières exécutions cron (VPS)
grep CRON /var/log/syslog | tail -50

# Filtrer sur votre utilisateur
grep CRON /var/log/syslog | grep monuser | tail -20

Sur Plesk, les logs d'une tâche sont disponibles directement dans son interface (colonne Dernier résultat).

Activer un log dédié

Le plus simple pour diagnostiquer : rediriger la sortie dans un fichier que vous consultez.

*/5 * * * * /chemin/script.sh >> /home/user/logs/script.log 2>&1

Vérifiez ensuite le fichier : s'il est vide, le cron ne tourne pas (vérifiez la syntaxe et l'activation). S'il contient des erreurs, vous avez votre cause.

Fuseau horaire

Cron utilise le fuseau horaire du serveur. Sur nos infrastructures, c'est Europe/Paris par défaut. Pour vérifier :

timedatectl
# ou
date

Si vous avez besoin d'une heure dans un autre fuseau pour une tâche ponctuelle, préfixez la commande :

0 9 * * * TZ=America/New_York /chemin/script.sh

Pour aller plus loin

Besoin d'aide ?

Cette documentation ne couvre pas votre cas ? Notre support humain est là.