Chapitre 8.3 - Cron Avancé et systemd Timers
Objectifs d'Apprentissage
À la fin de ce chapitre, vous serez capable de:
- Utiliser cron système (/etc/crontab, /etc/cron.d)
- Comprendre anacron
- Créer des systemd timers
- Comparer cron vs systemd timers
- Gérer les logs cron
- Implémenter des tâches planifiées avancées
Cron Système
/etc/crontab
Format avec utilisateur:
# /etc/crontab
# Format: MIN HEURE JOUR MOIS JOUR_SEMAINE UTILISATEUR COMMANDE
# Exemple
0 2 * * * root /usr/local/bin/backup.sh
*/15 * * * * www-data /usr/local/bin/check.sh
Éditer:
sudo nano /etc/crontab
/etc/cron.d/
Répertoire pour fichiers cron système:
# Créer fichier
sudo nano /etc/cron.d/mon-tache
# Format (avec utilisateur)
0 2 * * * user1 /usr/local/bin/script.sh
# Permissions importantes
sudo chmod 644 /etc/cron.d/mon-tache
Avantages:
- Organisation par fichier
- Facile à gérer
- Pas besoin de crontab -e
Répertoires Spéciaux
/etc/cron.hourly/ # Exécuté chaque heure (00:00)
/etc/cron.daily/ # Exécuté chaque jour (06:25)
/etc/cron.weekly/ # Exécuté chaque semaine (dimanche 06:47)
/etc/cron.monthly/ # Exécuté chaque mois (1er à 06:52)
Placer scripts exécutables (sans extension .sh)
Anacron
Pour Systèmes Non 24/7
Anacron exécute des tâches même si le système était éteint.
# Configuration
/etc/anacrontab
# Format
# période délai identifiant commande
1 5 backup /usr/local/bin/backup.sh
7 10 weekly-clean /usr/local/bin/cleanup.sh
Fonctionnement:
- Vérifie si tâche exécutée dans période
- Si non, exécute après délai
- Idéal pour laptops, systèmes intermittents
systemd Timers
Alternative Moderne à Cron
Avantages:
- Intégration systemd
- Logs avec journalctl
- Dépendances entre unités
- Plus flexible
Créer un Timer
Service:
# /etc/systemd/system/backup.service
[Unit]
Description=Backup Quotidien
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
User=backup
StandardOutput=journal
StandardError=journal
Timer:
# /etc/systemd/system/backup.timer
[Unit]
Description=Timer pour Backup Quotidien
Requires=backup.service
[Timer]
OnCalendar=daily
OnCalendar=02:00
Persistent=true
[Install]
WantedBy=timers.target
Activer:
sudo systemctl daemon-reload
sudo systemctl enable backup.timer
sudo systemctl start backup.timer
Syntaxe OnCalendar
# Format: DayOfWeek Year-Month-Day Hour:Minute:Second
# Tous les jours à 2h
OnCalendar=daily
OnCalendar=02:00
# Tous les lundis à 9h
OnCalendar=Mon *-*-* 09:00:00
# Le 1er de chaque mois
OnCalendar=monthly
OnCalendar=*-*-01 00:00:00
# Toutes les heures
OnCalendar=hourly
# Toutes les 15 minutes
OnCalendar=*:0/15
Options Timer
[Timer]
# Planification
OnCalendar=daily
OnBootSec=10min
OnUnitActiveSec=1h
# Persistance (exécute si manqué)
Persistent=true
# Accuratie (exécution approximative)
AccuracySec=1min
# Randomisation
RandomizedDelaySec=5min
Comparaison Cron vs Timers
| Caractéristique | Cron | systemd Timers |
|---|---|---|
| Logs | Fichiers séparés | journalctl |
| Dépendances | Non | Oui |
| Persistance | Non | Oui (option) |
| Flexibilité | Limitée | Élevée |
| Simplicité | Simple | Plus complexe |
| Disponibilité | Partout | systemd requis |
Gestion des Logs
Logs Cron
# Logs système
/var/log/syslog # Ubuntu/Debian
/var/log/cron # Red Hat/CentOS
# Voir logs cron
sudo grep CRON /var/log/syslog
sudo tail -f /var/log/syslog | grep CRON
Logs systemd Timers
# Logs du timer
sudo journalctl -u backup.timer
# Logs du service
sudo journalctl -u backup.service
# Suivre
sudo journalctl -u backup.timer -f
# Depuis date
sudo journalctl -u backup.timer --since "2024-01-01"
Exemples Avancés
Backup avec Timer
Service:
[Unit]
Description=Backup Automatique
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
User=backup
StandardOutput=journal
StandardError=journal
Timer:
[Unit]
Description=Timer Backup Quotidien
[Timer]
OnCalendar=daily
OnCalendar=02:00
Persistent=true
RandomizedDelaySec=30min
[Install]
WantedBy=timers.target
Nettoyage avec Cron
# /etc/cron.daily/cleanup
#!/bin/bash
# Nettoyage quotidien
find /var/log -name "*.log" -mtime +30 -delete
find /tmp -type f -mtime +7 -delete
Monitoring avec Timer
Service:
[Unit]
Description=Check Disk Space
[Service]
Type=oneshot
ExecStart=/usr/local/bin/check-disk.sh
Timer:
[Unit]
Description=Timer Check Disk
[Timer]
OnCalendar=*:0/15
OnBootSec=5min
[Install]
WantedBy=timers.target
Bonnes Pratiques
Cron
- Utiliser chemins absolus
- Rediriger sortie/erreurs
- Tester scripts manuellement
- Documenter dans commentaires
- Vérifier logs régulièrement
systemd Timers
- Créer service séparé
- Utiliser Persistent=true si nécessaire
- Configurer RandomizationDelay
- Tester avec OnBootSec d'abord
- Monitorer avec journalctl
Résumé
Dans ce chapitre, vous avez appris:
Cron système: /etc/crontab, /etc/cron.d/, répertoires spéciaux
Anacron: Pour systèmes intermittents
systemd timers: Alternative moderne avec dépendances
Syntaxe: OnCalendar pour planification flexible
Logs: journalctl pour timers, /var/log pour cron
Comparaison: Cron simple, timers plus puissants
Pratique: Backup, nettoyage, monitoring planifiés
Prochaines Étapes
Module 9: Sécurité Système
Module 10: Gestion des Paquets
Chapitre créé le: Décembre 2024