Aller au contenu principal

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.