Les cronjobs sont des tâches planifiées qui s'exécutent automatiquement à des moments spécifiques. Ils sont essentiels pour la maintenance du serveur, les sauvegardes et les tâches d'application. Chez Theory7, nous utilisons des cronjobs pour tout, des sauvegardes quotidiennes à la surveillance précise à la minute. Dans ce guide, vous apprendrez à configurer et à gérer correctement les cronjobs.

Qu'est-ce que les cronjobs ?

Un cronjob est un planificateur de tâches Unix qui exécute des commandes ou des scripts à des moments planifiés. Applications typiques :

  • Sauvegardes - Sauvegarde quotidienne de bases de données et de fichiers
  • Maintenance - Nettoyage et rotation des fichiers journaux
  • E-mail - Envoi de newsletters ou de notifications
  • Applications - Cron WordPress, planificateur Laravel
  • Surveillance - Exécution de vérifications de santé

Éditer le crontab

Chaque utilisateur a son propre crontab. Ouvrez avec :

crontab -e

Cela ouvre votre crontab personnel dans l'éditeur par défaut. Les cronjobs système se trouvent dans :

/etc/crontab
/etc/cron.d/

Comprendre la syntaxe cron

Une ligne cron se compose de 5 champs de temps plus la commande :

* * * * * commande
| | | | |
| | | | +-- Jour de la semaine (0-7, 0 et 7 = dimanche)
| | | +---- Mois (1-12)
| | +------ Jour du mois (1-31)
| +-------- Heure (0-23)
+---------- Minute (0-59)

Caractères spéciaux

  • * - Toute valeur
  • , - Plusieurs valeurs (1,3,5)
  • - - Plage (1-5)
  • / - Pas (*/5 = toutes les 5)

Exemples expliqués

# Chaque jour à 03:00
0 3* * * /chemin/vers/script.sh

# Chaque heure à l'heure pleine
0 * * * * /chemin/vers/script.sh

# Toutes les 5 minutes
*/5* * * * /chemin/vers/script.sh

# Chaque jour de la semaine à 08:30
30 8* * 1-5 /chemin/vers/script.sh

# Le 1er et le 15 de chaque mois à minuit
0 0 1,15* * /chemin/vers/script.sh

# Chaque dimanche à 04:00
0 4* * 0 /chemin/vers/script.sh

Créer des cronjobs

Exemple : Sauvegarde de base de données

crontab -e

Ajoutez :

# Sauvegarde MySQL quotidienne à 03:00
0 3* * * mysqldump -u root -pMOTDEPASSE base_de_données > /backups/db_$(date +\%Y\%m\%d).sql

Remarque : Dans crontab, % doit être échappé comme \%.

Exemple : Nettoyage de fichiers journaux

# Supprimer les logs de plus de 30 jours chaque semaine (dimanche 05:00)
0 5 * * 0 find /var/log -name "*.log" -mtime +30 -delete

Exemple : Exécuter un script PHP

# Script cron PHP toutes les 15 minutes*/15 * * * * /usr/bin/php /var/www/site/cron.php

Utilisez toujours le chemin complet vers php.

Cronjobs pour les applications web

WordPress WP-Cron

WordPress a un système cron intégré qui n'est pas fiable avec peu de trafic. Passez à un vrai cron :

  1. Ajoutez à wp-config.php :
  2. define('DISABLE_WP_CRON', true);
  3. Créez une entrée crontab :
  4. */5* * * * /usr/bin/php /var/www/wordpress/wp-cron.php

Planificateur Laravel

Laravel a un planificateur qui doit s'exécuter chaque minute :

* * * * * cd /var/www/laravel && php artisan schedule:run >> /dev/null 2>&1

Sortie et journalisation

Sortie vers un fichier

0 3 * * * /chemin/vers/script.sh >> /var/log/mon-cron.log 2>&1
  • >> - Ajouter à un fichier
  • 2>&1 - Rediriger les erreurs vers le même fichier

Sortie par e-mail

Par défaut, cron envoie la sortie par e-mail à l'utilisateur. Configurez un e-mail :

MAILTO=admin@votredomaine.fr
0 3* * * /chemin/vers/script.sh

Ou supprimez toute sortie :

0 3 * * * /chemin/vers/script.sh > /dev/null 2>&1

Gérer le crontab

Voir tous les cronjobs

crontab -l

Cronjobs d'un autre utilisateur

sudo crontab -l -u www-data

Supprimer le crontab

crontab -r

Remarque : cela supprime TOUS les cronjobs de cet utilisateur.

Voir les journaux cron

Vérifiez si les cronjobs s'exécutent :

# Debian/Ubuntu
grep CRON /var/log/syslog

# CentOS/RHEL
tail -f /var/log/cron

Erreurs courantes

Le script fonctionne manuellement, pas en tant que cron

Les variables d'environnement sont différentes dans cron. Utilisez des chemins complets :

# Mauvais
0 3* * * script.sh

# Bon
0 3 * * * /usr/local/bin/script.sh

Définir le PATH dans crontab

PATH=/usr/local/bin:/usr/bin:/bin
0 3* * * script.sh

Permissions

Assurez-vous que les scripts sont exécutables :

chmod +x /chemin/vers/script.sh

Articles connexes

Plus d'informations sur les serveurs VPS chez Theory7

Besoin d'aide ?

Nous sommes là pour vous ! Vous rencontrez un problème ou avez des questions ? Notre équipe de support est prête à vous aider personnellement. Envoyez-nous un message via le système de tickets - nous répondons généralement dans quelques heures et sommes heureux de vous aider.