Tâches planifiées avec cron Planifiez sauvegardes, scripts et maintenance sur un VPS HolyCloud avec crontab, syntaxe des champs, logs et bonnes pratiques. ~9 min de lecture Débutant #cron #crontab #automatisation #planification Tâches planifiées avec cron Cron exécute des commandes à intervalles réguliers sur votre VPS Linux HolyCloud : sauvegardes rsync, rotation de logs, envoi de rapports ou apt upgrade nocturne. Ce guide explique la syntaxe crontab, les environnements d'exécution, la journalisation et les pièges courants (chemins, fuseau horaire). Prérequis VPS HolyCloud Ubuntu/Debian avec cron installé (paquet cron par défaut) Accès sudo pour les tâches système (/etc/cron.d/, /etc/cron.daily/) Scripts testés manuellement avant planification Fuseau horaire configuré (voir « Timezone et NTP ») — cron utilise l'heure locale du serveur Conseil : redirigez toujours la sortie standard et d'erreur vers un fichier log ou /dev/null explicite pour éviter les mails spammés à root. Étape 1 : vérifier le service cron systemctl status cron which crontab Installer si absent : sudo apt update sudo apt install -y cron sudo systemctl enable --now cron Étape 2 : syntaxe d'une ligne crontab ┌───────────── minute (0-59) │ ┌─────────── heure (0-23) │ │ ┌───────── jour du mois (1-31) │ │ │ ┌─────── mois (1-12) │ │ │ │ ┌───── jour de la semaine (0-7, 0 et 7 = dimanche) │ │ │ │ │ * * * * * commande Exemples : | Expression | Signification | |------------|---------------| | 0 3 * | Chaque jour à 03:00 | | /15 * | Toutes les 15 minutes | | 0 0 0 | Chaque dimanche à minuit | | @daily | Alias de 0 0 * | Étape 3 : crontab utilisateur Éditer votre crontab : crontab -e Exemple — sauvegarde du répertoire web à 02:30 : 30 2 * * * /usr/bin/rsync -a /var/www/ /var/backups/www/ >> /var/log/rsync-cron.log 2>&1 Lister et sauvegarder : crontab -l crontab -l > ~/crontab-backup-$(date +%F).txt Supprimer toutes les entrées : crontab -r Étape 4 : variables d'environnement Cron n'charge pas toujours .bashrc. En tête du crontab : SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin [email protected] 0 4 * * * /opt/scripts/backup.sh Script exemple /opt/scripts/backup.sh : #!/bin/bash set -euo pipefail DATE=$(date +%F) tar -czf "/var/backups/app-$DATE.tar.gz" /var/www/exemple.fr find /var/backups -name 'app-*.tar.gz' -mtime +7 -delete sudo chmod +x /opt/scripts/backup.sh sudo chown root:root /opt/scripts/backup.sh Étape 5 : tâches système (/etc/cron.d) Fichier dédié (nécessite un utilisateur dans la ligne) : sudo nano /etc/cron.d/monapp-backup # m h dom mon dow user command 15 3 * * * root /opt/scripts/backup.sh >> /var/log/monapp-backup.log 2>&1 sudo chmod 644 /etc/cron.d/monapp-backup sudo systemctl reload cron Scripts quotidiens pré-packagés Debian : ls -la /etc/cron.daily/ sudo run-parts --test /etc/cron.daily Étape 6 : journalisation et débogage Logs système (Ubuntu/Debian récents) : grep CRON /var/log/syslog | tail -20 journalctl -u cron -n 30 --no-pager Tester une commande au moment présent (dans 2 minutes) : */2 * * * * echo "test $(date)" >> /tmp/cron-test.log Attendez puis : cat /tmp/cron-test.log Étape 7 : restrictions et sécurité Limiter qui peut utiliser cron : cat /etc/cron.allow 2>/dev/null || echo "Pas de cron.allow" ls /etc/cron.deny 2>/dev/null Ne planifiez jamais de curl | bash depuis Internet ; préférez des scripts versionnés sous /opt/. Vérification crontab -l sudo ls -la /etc/cron.d/ systemctl is-active cron grep "$(whoami)" /var/log/syslog | grep CRON | tail -5 Après l'heure prévue, le fichier log ou la sortie attendue doit exister. Besoin d'aide HolyCloud La tâche ne s'exécute pas : chemin absolu (which rsync), droits d'exécution, MAILTO / logs Fuseau horaire incorrect : timedatectl status Permission denied sur /etc/cron.d : propriétaire root, mode 644, champ user obligatoire Support HolyCloud : contenu de crontab -l, extrait grep CRON /var/log/syslog, script et heure prévue Suite de la lecture Article précédent Timezone et NTP Lire