Comment configurer les tâches CRON sur cPanel
Temps estimé : 10 minutes
Difficulté : Intermédiaire ⭐⭐
Prérequis : Accès à cPanel, connaissances basiques en ligne de commande
📋 Introduction
Les tâches CRON (ou Cron Jobs) permettent d'automatiser l'exécution de scripts et de commandes à des intervalles réguliers sur votre serveur. C'est un outil puissant pour automatiser les tâches répétitives sans intervention manuelle.
Exemples d'utilisation courants
| Tâche | Fréquence typique |
|---|---|
| 🔄 Sauvegardes automatiques | Quotidien ou hebdomadaire |
| 📧 Envoi de newsletters | Hebdomadaire |
| 🗑️ Nettoyage de fichiers temporaires | Quotidien |
| 📊 Génération de rapports | Quotidien ou mensuel |
| 🔔 WordPress WP-Cron | Toutes les 15-30 minutes |
| 💾 Synchronisation de données | Toutes les heures |
| 📬 Vérification d'emails | Toutes les 5 minutes |
| 🛒 Mise à jour des stocks (e-commerce) | Toutes les heures |
🔢 Comprendre la Syntaxe CRON
Structure d'une expression CRON
Une tâche CRON est définie par 5 champs temporels + la commande à exécuter :
* * * * * commande à exécuter
│ │ │ │ │
│ │ │ │ └─── Jour de la semaine (0-7) (0 et 7 = Dimanche)
│ │ │ └──────── Mois (1-12)
│ │ └───────────── Jour du mois (1-31)
│ └────────────────── Heure (0-23)
└─────────────────────── Minute (0-59)
Valeurs possibles
| Champ | Valeurs | Caractères spéciaux |
|---|---|---|
| Minute | 0-59 | * , - / |
| Heure | 0-23 | * , - / |
| Jour du mois | 1-31 | * , - / |
| Mois | 1-12 ou jan-dec | * , - / |
| Jour de la semaine | 0-7 ou sun-sat | * , - / |
Caractères spéciaux
| Caractère | Signification | Exemple |
|---|---|---|
* | Toutes les valeurs | * * * * * = chaque minute |
, | Liste de valeurs | 1,15,30 = à la minute 1, 15 et 30 |
- | Plage de valeurs | 1-5 = de 1 à 5 |
/ | Intervalle | */15 = toutes les 15 unités |
Exemples d'expressions CRON
| Expression | Signification |
|---|---|
* * * * * | Chaque minute |
*/5 * * * * | Toutes les 5 minutes |
*/15 * * * * | Toutes les 15 minutes |
0 * * * * | Chaque heure (à la minute 0) |
0 */2 * * * | Toutes les 2 heures |
0 0 * * * | Chaque jour à minuit |
0 2 * * * | Chaque jour à 2h du matin |
30 4 * * * | Chaque jour à 4h30 |
0 0 * * 0 | Chaque dimanche à minuit |
0 0 * * 1-5 | Du lundi au vendredi à minuit |
0 0 1 * * | Le 1er de chaque mois à minuit |
0 0 1 1 * | Le 1er janvier à minuit |
0 8,12,18 * * * | À 8h, 12h et 18h chaque jour |
0 9-17 * * 1-5 | De 9h à 17h, du lundi au vendredi |
⚙️ Créer une Tâche CRON sur cPanel
Étape 1 : Accéder aux tâches CRON
- Connectez-vous à cPanel
- Dans la section Avancé (Advanced), cliquez sur Tâches Cron (Cron Jobs)

Étape 2 : Configurer les notifications email
Avant de créer des tâches, configurez l'adresse email pour recevoir les résultats :
- Dans la section Email Cron, entrez votre adresse email
- Cliquez sur Mettre à jour l'email (Update Email)

💡 Astuce : Pour désactiver les notifications d'une tâche spécifique, ajoutez
>/dev/null 2>&1à la fin de la commande.
Étape 3 : Ajouter une nouvelle tâche CRON
- Descendez jusqu'à la section Ajouter une nouvelle tâche Cron
- Paramètres courants : Utilisez le menu déroulant pour sélectionner un intervalle prédéfini
| Option | Expression générée |
|---|---|
| Une fois par minute | * * * * * |
| Une fois toutes les 5 minutes | */5 * * * * |
| Deux fois par heure | 0,30 * * * * |
| Une fois par heure | 0 * * * * |
| Deux fois par jour | 0 0,12 * * * |
| Une fois par jour | 0 0 * * * |
| Une fois par semaine | 0 0 * * 0 |
| Une fois par mois | 0 0 1 * * |
Étape 4 : Personnaliser l'intervalle (optionnel)
Si les options prédéfinies ne conviennent pas, remplissez manuellement les champs :
- Minute :
0-59ou* - Heure :
0-23ou* - Jour :
1-31ou* - Mois :
1-12ou* - Jour de la semaine :
0-7ou*
Étape 5 : Entrer la commande
Dans le champ Commande, entrez la commande complète avec le chemin absolu.
Exemples de commandes :
# Exécuter un script PHP
/usr/local/bin/php /home/username/public_html/script.php
# Exécuter avec wget (appeler une URL)
/usr/bin/wget -q -O /dev/null https://monsite.com/cron.php
# Exécuter avec curl
/usr/bin/curl -s https://monsite.com/cron.php > /dev/null 2>&1
# Supprimer des fichiers de plus de 7 jours
/usr/bin/find /home/username/public_html/tmp -type f -mtime +7 -delete
Étape 6 : Sauvegarder
Cliquez sur Ajouter une nouvelle tâche Cron (Add New Cron Job)
La tâche apparaît dans la liste Tâches Cron actuelles (Current Cron Jobs).
📝 Commandes CRON Courantes
Exécuter un script PHP
/usr/local/bin/php /home/username/public_html/mon-script.php
💡 Le chemin vers PHP peut varier. Chemins courants :
/usr/local/bin/php/usr/bin/php/usr/local/bin/ea-php81(pour une version spécifique)
Appeler une URL avec wget
/usr/bin/wget -q -O /dev/null https://monsite.com/cron.php
| Option | Signification |
|---|---|
-q | Mode silencieux (quiet) |
-O /dev/null | Ne pas sauvegarder la sortie |
Appeler une URL avec curl
/usr/bin/curl -s https://monsite.com/cron.php > /dev/null 2>&1
| Option | Signification |
|---|---|
-s | Mode silencieux |
> /dev/null 2>&1 | Rediriger toute sortie vers null |
Supprimer des fichiers temporaires
# Supprimer les fichiers .tmp de plus de 24h
/usr/bin/find /home/username/public_html/cache -name "*.tmp" -mtime +1 -delete
# Supprimer les fichiers de plus de 7 jours dans un dossier
/usr/bin/find /home/username/logs -type f -mtime +7 -delete
Sauvegarder une base de données
/usr/bin/mysqldump -u db_user -p'mot_de_passe' db_name > /home/username/backups/backup_$(date +\%Y\%m\%d).sql
⚠️ Sécurité : Évitez de stocker les mots de passe en clair. Utilisez un fichier
.my.cnfsécurisé.
Compresser des fichiers
/usr/bin/tar -czf /home/username/backups/site_$(date +\%Y\%m\%d).tar.gz /home/username/public_html
🔵 Tâches CRON pour WordPress
Problème avec WP-Cron
WordPress utilise un système de "pseudo-cron" appelé WP-Cron qui s'exécute à chaque chargement de page. Sur les sites à faible trafic, les tâches planifiées peuvent être retardées.
Solution : Désactiver WP-Cron et utiliser un vrai CRON système.
Étape 1 : Désactiver WP-Cron
Éditez le fichier wp-config.php et ajoutez cette ligne avant /* That's all, stop editing! */ :
define('DISABLE_WP_CRON', true);
Étape 2 : Créer une tâche CRON système
Option A : Avec wget
/usr/bin/wget -q -O /dev/null https://monsite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
Option B : Avec curl
/usr/bin/curl -s https://monsite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1
Option C : Avec PHP directement
/usr/local/bin/php /home/username/public_html/wp-cron.php > /dev/null 2>&1
Fréquence recommandée pour WordPress
| Type de site | Fréquence |
|---|---|
| Blog personnel | Toutes les heures (0 * * * *) |
| Site vitrine | Toutes les 30 minutes (*/30 * * * *) |
| E-commerce WooCommerce | Toutes les 15 minutes (*/15 * * * *) |
| Site à fort trafic | Toutes les 5 minutes (*/5 * * * *) |
Configuration complète WordPress
| Intervalle | Commande |
|---|---|
*/15 * * * * | /usr/bin/wget -q -O /dev/null https://monsite.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1 |
📋 Exemples Pratiques
Exemple 1 : Sauvegarde quotidienne à 3h du matin
| Champ | Valeur |
|---|---|
| Minute | 0 |
| Heure | 3 |
| Jour | * |
| Mois | * |
| Jour semaine | * |
| Commande | /usr/local/bin/php /home/username/public_html/backup.php > /dev/null 2>&1 |
Expression complète : 0 3 * * *
Exemple 2 : Nettoyage du cache toutes les 6 heures
| Champ | Valeur |
|---|---|
| Minute | 0 |
| Heure | */6 |
| Jour | * |
| Mois | * |
| Jour semaine | * |
| Commande | /usr/local/bin/php /home/username/public_html/clear_cache.php |
Expression complète : 0 */6 * * *
Exemple 3 : Rapport hebdomadaire le lundi à 9h
| Champ | Valeur |
|---|---|
| Minute | 0 |
| Heure | 9 |
| Jour | * |
| Mois | * |
| Jour semaine | 1 |
| Commande | /usr/local/bin/php /home/username/public_html/weekly_report.php |
Expression complète : 0 9 * * 1
Exemple 4 : Mise à jour des prix toutes les heures (e-commerce)
| Champ | Valeur |
|---|---|
| Minute | 0 |
| Heure | * |
| Jour | * |
| Mois | * |
| Jour semaine | * |
| Commande | /usr/bin/curl -s https://monsite.com/update-prices.php > /dev/null 2>&1 |
Expression complète : 0 * * * *
Exemple 5 : Suppression des sessions expirées quotidienne
| Champ | Valeur |
|---|---|
| Minute | 30 |
| Heure | 2 |
| Jour | * |
| Mois | * |
| Jour semaine | * |
| Commande | /usr/bin/find /home/username/tmp/sessions -type f -mtime +1 -delete |
Expression complète : 30 2 * * *
✏️ Modifier ou Supprimer une Tâche CRON
Modifier une tâche
- Dans la section Tâches Cron actuelles, trouvez la tâche à modifier
- Cliquez sur Modifier (Edit)
- Effectuez vos modifications
- Cliquez sur Modifier la ligne (Edit Line)
Supprimer une tâche
- Dans la section Tâches Cron actuelles, trouvez la tâche à supprimer
- Cliquez sur Supprimer (Delete)
- Confirmez la suppression
🔧 Dépannage
La tâche CRON ne s'exécute pas
| ❌ Cause possible | ✅ Solution |
|---|---|
| Chemin incorrect vers PHP | Vérifiez avec which php en SSH |
| Chemin incorrect vers le script | Utilisez le chemin absolu complet |
| Permissions insuffisantes | Vérifiez les permissions du script (755) |
| Erreur de syntaxe dans le script | Testez le script manuellement |
| Expression CRON incorrecte | Vérifiez sur crontab.guru |
Trouver le chemin vers PHP
Connectez-vous en SSH et exécutez :
which php
Résultat typique : /usr/local/bin/php
Pour une version spécifique :
which ea-php81
Tester une commande manuellement
Avant de créer la tâche CRON, testez la commande en SSH :
/usr/local/bin/php /home/username/public_html/mon-script.php
Si le script fonctionne manuellement, il devrait fonctionner en CRON.
Recevoir des notifications d'erreur
Pour déboguer, supprimez temporairement > /dev/null 2>&1 de la commande.
Vous recevrez alors les erreurs par email.
Erreurs courantes
"No such file or directory"
/bin/sh: /home/username/public_html/script.php: No such file or directory
Solution : Vérifiez que le chemin est correct et que le fichier existe.
"Permission denied"
/bin/sh: /home/username/public_html/script.php: Permission denied
Solution : Rendez le script exécutable :
chmod 755 /home/username/public_html/script.php
Ou utilisez l'interpréteur PHP explicitement :
/usr/local/bin/php /home/username/public_html/script.php
"Command not found"
/bin/sh: php: command not found
Solution : Utilisez le chemin complet vers PHP (/usr/local/bin/php).
Vérifier les logs CRON
Les logs CRON sont généralement dans /var/log/cron (accès root requis).
Sur hébergement mutualisé, utilisez les notifications email pour déboguer.
⚠️ Bonnes Pratiques
Fréquence des tâches
| ⚠️ À éviter | ✅ Recommandé |
|---|---|
* * * * * (chaque minute) sans raison | Minimum 5-15 minutes entre les exécutions |
| Plusieurs tâches lourdes à la même heure | Échelonner les tâches dans le temps |
| Tâches inutiles | Supprimer les tâches obsolètes |
⚠️ Hébergement mutualisé : La plupart des hébergeurs limitent les CRON à un minimum de 5-15 minutes.
Sécurité
| Pratique | Recommandation |
|---|---|
| Mots de passe | Ne pas inclure en clair dans les commandes |
| Scripts sensibles | Placer hors de public_html |
| Logs | Surveiller régulièrement les exécutions |
| Permissions | Limiter les permissions des scripts |
Optimisation
# Bonne pratique : utiliser nice pour limiter la priorité
nice -n 15 /usr/local/bin/php /home/username/public_html/script.php
# Bonne pratique : rediriger la sortie pour éviter les emails
/usr/local/bin/php /home/username/script.php > /dev/null 2>&1
# Bonne pratique : logger dans un fichier pour le débogage
/usr/local/bin/php /home/username/script.php >> /home/username/logs/cron.log 2>&1
📊 Outils Utiles
Générateurs d'expressions CRON
| Outil | URL |
|---|---|
| Crontab Guru | crontab.guru |
| Cron Maker | cronmaker.com |
| Crontab Generator | crontab-generator.org |
Tester une expression CRON
Sur crontab.guru, entrez votre expression pour voir quand elle s'exécutera :
*/15 * * * *
Résultat : "At every 15th minute" Prochaines exécutions : 00:00, 00:15, 00:30, 00:45, 01:00...
📝 Récapitulatif
CONFIGURER UNE TÂCHE CRON :
1. cPanel → Avancé → Tâches Cron
2. Configurer l'email de notification (optionnel)
3. Sélectionner l'intervalle (menu déroulant ou personnalisé)
4. Entrer la commande avec chemin absolu
5. Cliquer sur "Ajouter une nouvelle tâche Cron"
SYNTAXE CRON :
┌─────────── Minute (0-59)
│ ┌───────── Heure (0-23)
│ │ ┌─────── Jour du mois (1-31)
│ │ │ ┌───── Mois (1-12)
│ │ │ │ ┌─── Jour de la semaine (0-7)
│ │ │ │ │
* * * * * commande
INTERVALLES COURANTS :
├── */5 * * * * → Toutes les 5 minutes
├── 0 * * * * → Toutes les heures
├── 0 0 * * * → Chaque jour à minuit
├── 0 0 * * 0 → Chaque dimanche à minuit
└── 0 0 1 * * → Le 1er de chaque mois
COMMANDES TYPES :
├── PHP : /usr/local/bin/php /chemin/script.php
├── wget : /usr/bin/wget -q -O /dev/null https://url
├── curl : /usr/bin/curl -s https://url > /dev/null 2>&1
└── find : /usr/bin/find /chemin -mtime +7 -delete
WORDPRESS WP-CRON :
1. Ajouter dans wp-config.php : define('DISABLE_WP_CRON', true);
2. Créer CRON : */15 * * * * wget -q -O /dev/null https://site.com/wp-cron.php?doing_wp_cron
DÉSACTIVER NOTIFICATIONS :
Ajouter à la fin de la commande : > /dev/null 2>&1
