Automatiser avec Cron
Ce guide vous explique comment automatiser des tâches sur votre VPS Linux avec cron.
Qu'est-ce que Cron ?
Cron est un planificateur de tâches intégré à Linux. Il permet d'exécuter automatiquement des commandes ou scripts à des intervalles définis.
Syntaxe Cron
┌───────────── minute (0 - 59)
│ ┌───────────── heure (0 - 23)
│ │ ┌───────────── jour du mois (1 - 31)
│ │ │ ┌───────────── mois (1 - 12)
│ │ │ │ ┌───────────── jour de la semaine (0 - 6) (dimanche = 0)
│ │ │ │ │
* * * * * commande à exécuter
Éditer la crontab
# Éditer les tâches de l'utilisateur actuel
crontab -e
# Éditer les tâches de root
sudo crontab -e
# Voir les tâches planifiées
crontab -l
Exemples courants
Exécution périodique
# Toutes les minutes
* * * * * /chemin/vers/script.sh
# Toutes les 5 minutes
*/5 * * * * /chemin/vers/script.sh
# Toutes les heures
0 * * * * /chemin/vers/script.sh
# Tous les jours à 3h du matin
0 3 * * * /chemin/vers/script.sh
# Tous les lundis à 8h
0 8 * * 1 /chemin/vers/script.sh
# Le 1er de chaque mois à minuit
0 0 1 * * /chemin/vers/script.sh
Raccourcis pratiques
@reboot # Au démarrage du serveur
@hourly # Toutes les heures (équivalent à 0 * * * *)
@daily # Tous les jours à minuit
@weekly # Tous les dimanches à minuit
@monthly # Le 1er du mois à minuit
@yearly # Le 1er janvier à minuit
Cas d'usage pratiques
Backup automatique de base de données
# Créer le script de backup
nano /root/scripts/backup-db.sh
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/root/backups"
# Créer le dossier si inexistant
mkdir -p $BACKUP_DIR
# Backup MySQL/MariaDB
mysqldump -u root -p'MOT_DE_PASSE' ma_base > $BACKUP_DIR/ma_base_$DATE.sql
# Compresser
gzip $BACKUP_DIR/ma_base_$DATE.sql
# Supprimer les backups de plus de 7 jours
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
# Rendre exécutable
chmod +x /root/scripts/backup-db.sh
# Ajouter à cron (tous les jours à 4h)
crontab -e
0 4 * * * /root/scripts/backup-db.sh
Redémarrage automatique d'un service
# Redémarrer Nginx tous les jours à 5h
0 5 * * * systemctl restart nginx
# Redémarrer un serveur FiveM toutes les 6 heures
0 */6 * * * systemctl restart fivem
Nettoyage automatique des logs
# Supprimer les logs de plus de 30 jours
0 3 * * * find /var/log -name "*.log" -mtime +30 -delete
Mise à jour automatique du système
# Mise à jour de sécurité tous les jours à 2h
0 2 * * * apt update && apt upgrade -y
Surveillance de l'espace disque
# Créer le script
nano /root/scripts/check-disk.sh
#!/bin/bash
THRESHOLD=80
USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $USAGE -gt $THRESHOLD ]; then
echo "Alerte : Disque à ${USAGE}%" | mail -s "Alerte disque VPS" votre@email.com
fi
# Vérifier toutes les heures
0 * * * * /root/scripts/check-disk.sh
Logs et débogage
Rediriger la sortie
# Vers un fichier de log
0 3 * * * /root/scripts/backup.sh >> /var/log/backup.log 2>&1
# Ignorer la sortie
0 3 * * * /root/scripts/backup.sh > /dev/null 2>&1
# Recevoir par email (si mail configuré)
0 3 * * * /root/scripts/backup.sh
Voir les logs cron
# Sur Ubuntu/Debian
grep CRON /var/log/syslog
# Ou
journalctl -u cron
Variables d'environnement
Ajoutez-les en haut de votre crontab :
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=votre@email.com
# Vos tâches
0 3 * * * /root/scripts/backup.sh
Outils utiles
Crontab Guru
Utilisez crontab.guru pour vérifier vos expressions cron.
Anacron
Pour les tâches qui doivent s'exécuter même si le serveur était éteint :
sudo apt install anacron
Conseil
Utilisez toujours des chemins absolus dans vos scripts cron, car l'environnement est différent de votre session interactive.