Retourner sur le site

Tâches planifiées avec cron

Planifiez sauvegardes, scripts et maintenance sur un VPS HolyCloud avec crontab, syntaxe des champs, logs et bonnes pratiques.

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