Tous les services opérationnels Devise EUR Aucun frais de mise en service Vous êtes à La Réunion ?
‹ Serveurs VPS et Docker

Crontab : planifier une tâche avec cron

Crontab est le fichier qui dit à cron quelles commandes lancer et quand. On l'ouvre avec crontab -e, puis on ajoute une ligne de cinq champs de temps (minute, heure, jour du mois, mois, jour de la semaine) suivis de la commande. 30 3 * * * /home/admin/sauvegarde.sh lance par exemple un script chaque nuit à 3 h 30. crontab -l affiche les tâches enregistrées, et chaque compte du serveur a la sienne.

Par Jonathan Dewaele · publié le

Cet article suit les pages de manuel de Debian 13 pour crontab(5), le format des lignes, et crontab(1), la commande, ainsi que la page crontab(5) d'Ubuntu, relues le 14 octobre 2026.

Les cinq champs

ChampValeurs
minute0 à 59
heure0 à 23
jour du mois1 à 31
mois1 à 12, ou jan, feb…
jour de la semaine0 à 7 (0 et 7 valent dimanche), ou mon, tue…

Dans chaque champ :

  • * veut dire « toutes les valeurs ».
  • 1-5 est un intervalle, bornes comprises : du lundi au vendredi dans le dernier champ.
  • 1,15 est une liste : le 1er et le 15 dans le champ du jour du mois.
  • */15 est un pas : toutes les 15 minutes dans le premier champ.

Quelques lignes types :

*/15 * * * *   toutes les 15 minutes
0 * * * *      chaque heure, à l'heure pile
30 3 * * *     chaque jour à 3 h 30
0 8 * * 1-5    du lundi au vendredi à 8 h
0 2 1 * *      le 1er de chaque mois à 2 h

Des raccourcis remplacent les cinq champs : @hourly, @daily, @weekly, @monthly, @yearly, et @reboot, qui lance la commande une fois au démarrage de cron.

Attention si le jour du mois et le jour de la semaine sont tous deux restreints, la tâche tourne quand l'un ou l'autre correspond. 0 4 1 * 5 tourne le 1er du mois, et aussi chaque vendredi.

Ajouter une tâche

  1. Écrivez d'abord la commande et lancez-la à la main, pour vérifier qu'elle fonctionne.
  2. Ouvrez votre crontab avec crontab -e. Au premier lancement, la commande peut vous demander de choisir un éditeur : nano est le plus simple.
  3. Ajoutez votre ligne à la fin du fichier, en écrivant les chemins complets :
30 3 * * * /home/admin/sauvegarde.sh >> /home/admin/sauvegarde.log 2>&1
  1. Enregistrez et quittez. La crontab est installée à la fermeture de l'éditeur, sans redémarrer quoi que ce soit.
  2. Vérifiez avec crontab -l.

La fin de la ligne, >> fichier.log 2>&1, ajoute la sortie normale et les erreurs à un fichier. Sans elle, cron essaie d'envoyer le résultat par courrier au propriétaire de la crontab, ce qui ne mène nulle part sur un serveur sans messagerie configurée, et vous ne saurez jamais pourquoi une tâche a échoué.

Les pièges courants

  • L'environnement n'est pas celui de votre session. Cron lance la commande avec /bin/sh (ou /usr/bin/sh), dans un environnement réduit. Une commande qui marche dans votre terminal peut échouer faute de trouver un programme : écrivez les chemins complets (/usr/bin/docker plutôt que docker), ou posez une ligne PATH= en tête de la crontab.
  • Le signe `%` coupe la commande. Cron le remplace par un retour à la ligne. Écrivez date +\%F avec une barre oblique inversée, ou placez la commande dans un script.
  • La dernière ligne doit finir par un retour à la ligne. Sans lui, crontab -e peut refuser d'installer le fichier, ou cron ignorer la ligne et le signaler dans le journal système.
  • L'heure est celle du serveur. timedatectl affiche son fuseau horaire ; beaucoup de serveurs tournent en UTC.
  • `crontab -r` supprime toute la crontab sans rien demander. Préférez crontab -i -r, qui demande confirmation, ou gardez une copie avec crontab -l > crontab.bak.

Savoir si la tâche a tourné

Le service cron note chaque lancement dans le journal du système. Sur Ubuntu et Debian :

journalctl -u cron --since today

Pour le résultat de la commande elle-même, lisez le fichier vers lequel vous avez dirigé sa sortie.

Exemple : une sauvegarde de conteneur

Sur un serveur Docker, une tâche cron peut exporter chaque nuit la base d'une application. Avec un service PostgreSQL nommé base dans un projet Compose rangé dans /srv/app :

15 2 * * * cd /srv/app && /usr/bin/docker compose exec -T base pg_dumpall -U postgres > /srv/sauvegardes/base.sql 2>> /srv/sauvegardes/erreurs.log

L'option -T évite à Compose de demander un terminal, que cron n'a pas. Le fonctionnement de Compose est détaillé dans Docker Compose : décrire et lancer vos conteneurs.

Sur un VPS Hubspace

Si la commande crontab est introuvable, installez cron avec sudo apt install cron. Le compte admin peut lancer Docker sans sudo : une tâche de sa crontab peut donc piloter vos conteneurs. Le disque principal du serveur est déjà sauvegardé chaque jour, avec sept sauvegardes gardées, mais pas le disque supplémentaire monté sur /mnt/data ; une exportation de base par cron reste utile pour récupérer une seule application, ou garder une copie ailleurs. Pour les autres commandes, voir Les commandes Linux à connaître.

Questions fréquentes

Comment lancer une tâche toutes les 30 secondes ?

Cron ne descend pas sous la minute. Pour un intervalle plus court, il faut un programme qui tourne en continu, ou un minuteur systemd.

Où sont les tâches du système ?

Dans /etc/crontab et le dossier /etc/cron.d/. Leurs lignes portent un champ supplémentaire, le nom du compte qui lance la commande, entre les cinq champs de temps et la commande.

Faut-il mettre sudo dans une ligne cron ?

Non. Une tâche qui a besoin des droits d'administrateur se place dans la crontab de root, avec sudo crontab -e.

Articles liés