Aller au contenu principal

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éristiqueCronsystemd Timers
LogsFichiers séparésjournalctl
DépendancesNonOui
PersistanceNonOui (option)
FlexibilitéLimitéeÉlevée
SimplicitéSimplePlus complexe
DisponibilitéPartoutsystemd 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