Fiche cron sous Linux

cron permet de planifier automatiquement l’exécution de commandes ou de scripts sous Linux.

Il est utile pour :

- lancer des sauvegardes
- nettoyer des fichiers temporaires
- exécuter un script de maintenance
- redémarrer un service
- générer des rapports
- automatiser une tâche d’administration

Éditer la crontab utilisateur

crontab -e

Afficher les tâches planifiées :

crontab -l

Supprimer toute la crontab de l’utilisateur :

crontab -r

Structure d’une ligne cron

* * * * * commande
| | | | |
| | | | +---- jour de la semaine : 0-7
| | | +------ mois : 1-12
| | +-------- jour du mois : 1-31
| +---------- heure : 0-23
+------------ minute : 0-59

Exemple :

30 2 * * * /usr/local/bin/sauvegarde.sh

Cette ligne exécute le script sauvegarde.sh tous les jours à 02h30.

Exemples courants

Exécuter une tâche toutes les minutes

* * * * * /usr/local/bin/script.sh

Exécuter une tâche toutes les 5 minutes

*/5 * * * * /usr/local/bin/script.sh

Exécuter une tâche toutes les heures

0 * * * * /usr/local/bin/script.sh

Exécuter une tâche tous les jours à 03h00

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

Exécuter une tâche tous les lundis à 08h30

30 8 * * 1 /usr/local/bin/script.sh

Exécuter une tâche le premier jour de chaque mois

0 2 1 * * /usr/local/bin/script.sh

Exécuter une tâche du lundi au vendredi

0 7 * * 1-5 /usr/local/bin/script.sh

Exécuter une tâche toutes les 2 heures

0 */2 * * * /usr/local/bin/script.sh

Exemples d’administration système

Sauvegarde d’un dossier

0 2 * * * tar -czf /backup/etc-$(date +\%F).tar.gz /etc

Dans cron, le caractère % doit être échappé avec \%.

Sauvegarde avec script dédié

0 2 * * * /opt/scripts/backup.sh

Script possible :

#!/bin/bash
tar -czf /backup/home-$(date +%F).tar.gz /home

Rendre le script exécutable :

chmod +x /opt/scripts/backup.sh

Nettoyage des fichiers temporaires

0 4 * * * find /tmp -type f -mtime +7 -delete

Cette commande supprime les fichiers de /tmp datant de plus de 7 jours.

Redémarrage d’un service

0 5 * * 0 systemctl restart apache2

Cette tâche redémarre Apache tous les dimanches à 05h00.

Vérification d’espace disque

*/30 * * * * df -h > /var/log/disk-usage.log

Test de disponibilité d’un serveur

*/5 * * * * ping -c 3 192.168.1.1 >> /var/log/ping-routeur.log 2>&1

Synchronisation avec rsync

0 1 * * * rsync -av /home/ /backup/home/

Redirection des sorties

Par défaut, cron peut envoyer les sorties par mail local.
Il est préférable de rediriger les sorties vers un fichier de log.

0 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1

Explication :

>>  ajoute la sortie standard dans le fichier
2>&1 ajoute aussi les erreurs dans le même fichier

Pour ignorer toute sortie :

0 2 * * * /opt/scripts/backup.sh > /dev/null 2>&1

Variables utiles dans crontab

On peut définir des variables au début de la crontab :

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""

Exemple complet :

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""

0 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1

Crontab système

La crontab système se trouve dans :

/etc/crontab

Elle contient un champ supplémentaire : l’utilisateur qui exécute la commande.

0 2 * * * root /opt/scripts/backup.sh

Répertoires cron système

Linux utilise aussi des répertoires dédiés :

/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

Un script placé dans /etc/cron.daily sera exécuté automatiquement selon la configuration du système.

Vérifier le service cron

Sur Debian/Ubuntu :

systemctl status cron

Redémarrer cron :

systemctl restart cron

Activer cron au démarrage :

systemctl enable cron

Sur certaines distributions, le service peut s’appeler crond.

systemctl status crond

Consulter les logs

Sur Debian/Ubuntu :

grep CRON /var/log/syslog

Avec systemd :

journalctl -u cron

ou :

journalctl -u crond

Erreurs fréquentes

ProblèmeCause probableCorrection
Le script ne se lance pasScript non exécutablechmod +x script.sh
La commande fonctionne en terminal mais pas avec cronPATH incompletUtiliser les chemins absolus
Pas de logSortie non redirigéeAjouter >> fichier.log 2>&1
Date mal interprétée% non échappéUtiliser \% dans la crontab
Droits insuffisantsMauvais utilisateurUtiliser la crontab root ou /etc/crontab
Service non actifcron arrêtésystemctl status cron

Bonnes pratiques

- utiliser des chemins absolus
- rediriger les sorties vers des logs
- tester les scripts manuellement avant cron
- rendre les scripts exécutables
- documenter chaque tâche
- éviter les commandes trop longues dans la crontab
- préférer un script dédié pour les tâches complexes

Exemple complet

Objectif : sauvegarder /etc tous les jours à 02h30.

Créer le script :

nano /opt/scripts/backup-etc.sh

Contenu :

#!/bin/bash

DATE=$(date +%F)
DEST="/backup/etc-$DATE.tar.gz"

tar -czf "$DEST" /etc

Droits :

chmod +x /opt/scripts/backup-etc.sh

Crontab :

30 2 * * * /opt/scripts/backup-etc.sh >> /var/log/backup-etc.log 2>&1

Récapitulatif des fichiers importants

/var/spool/cron/crontabs/     crontabs utilisateurs
/etc/crontab crontab système
/etc/cron.hourly scripts horaires
/etc/cron.daily scripts quotidiens
/etc/cron.weekly scripts hebdomadaires
/etc/cron.monthly scripts mensuels
/var/log/syslog logs cron Debian/Ubuntu
/var/log/cron logs cron selon distributions

À retenir

cron est un outil simple et puissant pour automatiser les tâches d’administration Linux.
Pour une configuration fiable, il faut toujours vérifier les chemins, les droits d’exécution et les logs.

Retour en haut