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
croninstallé (paquetcronpar 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/nullexplicite 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 :
| ------------ | --------------- |
|---|---|
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, extraitgrep CRON /var/log/syslog, script et heure prévue