1. L'importance des tâches automatisées sous Linux
Dans un datacenter à 3 heures du matin, un administrateur système monitore les fichiers de logs. C'est déjà la troisième nuit de suite qu'il doit intervenir pour une sauvegarde de données. Pourtant, son collègue arrive toujours свежее et bien reposé au bureau. La différence ? Ce dernier maîtrise parfaitement crontab, l'outil de planification de tâches intégré à Linux.
Imaginez un assistant infatigable qui exécute vos tâches répétitives selon un horaire précis. De la rotation simple des fichiers logs aux sauvegardes de bases de données complexes, en passant par l'ordonnancement de robots d'indexation et la génération de rapports automatisés, crontab peut gérer tout cela. Pendant que vous dormez paisiblement, votre système accomplit ces travaux automatiquement —醒来,直接查看结果。
À savoir : Malgré son apparence simple, crontab constitue un système de gestion des tâches planifiées extrêmement puissant et flexible, capable de traiter des besoins allant de la minute au mois.
2. Fondamentaux de crontab : syntaxe et configuration temporelle
2.1 Structure des champs temporels
La syntaxe de crontab s'articule autour de cinq champs temporels suivis d'une commande :
* * * * * commande_a_executer
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ └───── Jour de la semaine (0 - 6, 0 = Dimanche)
│ │ │ └─────── Mois (1 - 12)
│ │ └───────── Jour du mois (1 - 31)
│ └─────────── Heure (0 - 23)
└───────────── Minute (0 - 59)
Chaque astérisque (*) représente un champ temporel. De gauche à droite : minutes, heures, jour du mois, mois, jour de la semaine. Par exemple :
45 2 * * * /home/admin/scripts/sauvegarde.sh
Cette entrée déclenche le script chaque jour à 2h45 du matin.
2.2 Utilisation des caractères spéciaux
Crontab offre des caractères spéciaux pour des planifications sophistiquées :
- Virgule (,) : spécifie plusieurs instants distincts
0 9,14,18 * * *→ exécutions à 9h, 14h et 18h chaque jour - Tiret (-) : définit une plage temporelle
0 8-17 * * 1-5→ chaque heure de 8h à 17h, uniquement les jours ouvrables - Barre oblique (/) : indique un intervalle régulier
*/10 * * * *→ toutes les 10 minutes - Combinaison avancée :
0 6,18 1,10 * 2-4→ les 1er et 10 du mois, ainsi que mardi à jeudi, à 6h et 18h
Attention : Les champs jour-du-mois et jour-de-la-semaine fonctionnent en « OU », pas en « ET ». Si les deux sont spécifiés, la tâche s'exécute dès qu'une condition est remplie.
3. Configuration pratique de crontab
3.1 Édition et gestion des tâches
Pour modifier le crontab de l'utilisateur actuel :
crontab -e
Cette commande ouvre l'éditeur par défaut (généralement nano ou vim). Après sauvegarde, les nouvelles tâches s'activent immédiatement.
Autres commandes essentielles :
crontab -l: affiche toutes les tâches planifiées de l'utilisateurcrontab -r: supprime l'intégralité du crontab (à manipuler avec précaution !)crontab -u nomutilisateur -e: édite le crontab d'un autre utilisateur en tant qu'admin
3.2 Variables d'environnement et chemins absolus
Un écueil fréquent : l'environnement d'exécution de crontab diffère du shell utilisateur. Cela peut provoquer des erreurs de commande introuvables. Solutions :
- Utiliser systématiquement des chemins absolus dans les scripts
- Définir PATH dans le crontab : ``` PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
3. Charger le profil utilisateur avant exécution : ```
* * * * * . $HOME/.bash_profile; /opt/scripts/principal.sh
3.3 Redirection des sorties et journalisation
Par défaut, les sorties sont envoyées par email à l'utilisateur. Pratiquez plutôt la redirection vers des fichiers de logs :
* * * * * /opt/scripts/tache_quotidienne.sh >> /var/log/automations/script.log 2>&1
L'instruction 2>&1 fusionne la sortie d'erreur (stderr) avec la sortie standard (stdout) dans le fichier de log.
4. Tcehniques avancées et résolution de problèmes
4.1 Gestion des fuseaux horaires
Les décalages d'exécution constituent un problème récurrent. Vérification recommandée :
- Fuseau système : ``` timedatectl status
2. Consulter les logs crontab : ```
grep CRON /var/log/syslog
- Spécifier un fuseau dans le crontab : ``` TZ=Europe/Paris 0 3 * * * /opt/scripts/majQuotidienne.sh
#### 4.2 Verrouillage des tâches critiques
Lorsqu'une tâche peut dépasser son intervalle d'exécution, le verrouillage prévient les doublons :
-
-
-
-
- flock -xn /var/run/verrou_principal.lock -c '/opt/scripts/traitement.sh'
-
-
-
La commande flock crée un fichier de verrou garantissant qu'une seule instance s'exécute simultanément.
#### 4.3 Configuration des notifications par email
Même avec redirection vers logs, les alertes email demeurent utiles pour les échecs critiques :
MAILTO="equipe@example.com" 30 4 * * 1 /opt/scripts/backup Hebdomadaire.sh || echo "Echec sauvegarde !" | mail -s "Alerte Backup" $MAILTO
### 5. Applications concrètes
#### 5.1 Sauvegarde automatisée de base de données PostgreSQL
0 3 * * * pg_dump -U postgres -Fc mabase | gzip > /sauvegardes/pg_backup_$(date +%Y-%m-%d).dump.gz
Cette ligne effectue une sauvegarde quotidienne à 3h du matin avec compression. Points d'attention :
- Les caractères spéciaux dans les mots de passe nécessitent des guillemets
- Le symbole % dans date doit être échappé
- Stocker les credentials dans un fichier de configuration plutôt qu'en ligne de commande
#### 5.2 Nettoyage et rotation des logs applicatifs
0 2 * * * find /var/log/application -name "*.log" -mtime +30 -delete 30 2 * * * /usr/sbin/logrotate /etc/logrotate.d/monappli
Ce configuration assure :
1. Suppression quotidienne des logs de plus de 30 jours à 2h00
2. Rotation structurée via logrotate à 2h30
#### 5.3 Surveillance système avec seuils d'alerte
*/5 * * * * /usr/bin/python3 /opt/monitoring/verif_espace.sh || echo "Espace disque critique !" | mail -s "Alerte Disque" admin@mondomaine.com
Vérification toutes les 5 minutes. En cas de problème (code de retour non nul), une notification est immédiatement envoyée.
### 6. Recommandations et pièges à éviter
#### 6.1 Les erreurs courantes des débutants
1. **Variables d'environnement manquantes** : toujours employer des chemins absolus ou initialiser PATH en début de script
2. **Échappement du %** : dans crontab, % doit être échappé (\%) sinon interpreté comme retour à la ligne
3. **Permissions inadéquates** : vérifier les droits d'exécution du script et l'accès aux fichiers concernés
4. **Configuration temporelle** : le champ jour-semaine utilise 0 pour Dimanche, mais 7 fonctionne également
5. **Absence de journalisation** : toujours rediriger les sorties pour faciliter le débogage
#### 6.2 Bonnes pratiques de sécurité
1. Restreindre l'accès crontab via les fichiers : ```
# /etc/cron.allow : utilisateurs autorisés
# /etc/cron.deny : utilisateurs interdits
- Ne jamais exposer de mots de passe en clair dans les crontab de production
- Auditer régulièrement les tâches planifiées et éliminer celles devenues obsolètes
- Mettre en place une surveillacne des tâches critiques avec confirmation d'exécution
6.3 Optimisation des performances
- Décalage temporel : disperser les tâches sur plusieurs minutes plutôt que toutes à l'heure pile
- Outils alternatifs : pour des executions très fréquentes (toutes les minutes), considérer systemd timer
- Tâches longues : implémenter des points de reprise et une journalisation de progression
- Ressources système : utiliser nice ou ionice pour les tâches consommatrices
Lors de l'administration de parcs de serveurs, nous avons observé qu'une planification intelligente des tâches crontab réduit considérablement les pics de charge. Répartir les sauvegardes entre 2h et 5h du matin plutôt que toutes à 2h00 permet d'équilibrer la charge. Pour les tâches nécessitant un ordre précis, enchaîner les sous-tâches dans un script maître offre plus de contrôle que de jouer sur les intervalles crontab.