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.
- Connectez-vous à votre espace Plesk.
- Dans la colonne de droite, cliquez sur Tâches planifiées (ou Scheduled Tasks).
- Cliquez sur Ajouter une tâche.
- 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/curlsur 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.
- Définissez la fréquence (champs graphiques ou expression cron avancée).
- Cochez Notifier si vous voulez un email en cas de sortie non vide (voir plus bas).
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 :*/15sur la minute = toutes les 15 min).a-b— plage (ex :9-17sur l'heure = de 9 h à 17 h).a,b,c— liste (ex :1,15sur le jour du mois = les 1er et 15).
Exemples courants
| Expression | Signification |
|---|---|
*/5 * * * * | Toutes les 5 minutes |
0 * * * * | Chaque heure pile |
0 2 * * * | Tous les jours à 2 h du matin |
30 3 * * 1 | Chaque lundi à 3 h 30 |
0 0 1 * * | Le 1er de chaque mois à minuit |
0 9-18 * * 1-5 | Toutes 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
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
- Chemin relatif au lieu d'absolu.
- Variable d'environnement manquante (ex :
$HOME, clé API). - Permissions insuffisantes sur le script (oubli du
chmod +x). - Shebang manquant ou incorrect dans un script (
#!/bin/bash). - 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