Dépannage · Hetzner
Tâche cron Hetzner qui ne s’exécute pas ? Voici comment la réparer
Une checklist pratique pour les tâches cron qui ne tournent pas sur un serveur Hetzner Cloud ou dédié — environnement, chemins, fuseau horaire et mail.
Si une tâche cron fonctionne à la main mais ne se déclenche jamais via crontab
sur votre serveur Hetzner, c’est presque toujours l’une d’une poignée de causes.
Parcourez cette liste.
1. Vérifiez que cron tourne vraiment
Sur une image Hetzner Cloud fraîche, le démon cron devrait être actif — mais vérifiez :
systemctl status cron # Debian/Ubuntu
systemctl status crond # CentOS/Rocky/Alma
S’il est inactif, activez-le et démarrez-le :
sudo systemctl enable --now cron
2. Vérifiez que la tâche est dans la bonne crontab
Une tâche dans votre crontab utilisateur (crontab -e) tourne en tant que vous ;
une tâche dans /etc/crontab ou /etc/cron.d/* doit inclure un champ
utilisateur. Modifier la mauvaise est l’erreur la plus courante :
crontab -l # les tâches de votre utilisateur
sudo crontab -l # les tâches de root
cat /etc/cron.d/* # les tâches système (nécessitent une colonne utilisateur)
3. Le PATH est minimal sous cron
Cron tourne avec un environnement réduit — typiquement PATH=/usr/bin:/bin. Un
script qui appelle node, python3, docker ou pg_dump échouera avec « command
not found » même s’il marche dans votre shell. Utilisez des chemins absolus, ou
définissez PATH en haut de la crontab :
PATH=/usr/local/bin:/usr/bin:/bin
0 2 * * * /usr/local/bin/node /opt/app/job.js
4. Les variables d’environnement manquent
Cron ne charge pas ~/.bashrc, ~/.profile ni /etc/environment comme le fait
une connexion interactive. Les secrets et la configuration dont vous dépendez ne
sont tout simplement pas là. Chargez-les explicitement :
0 2 * * * . /opt/app/.env && /opt/app/run.sh
5. Vérifiez le fuseau horaire du serveur
Les images Hetzner sont souvent en UTC par défaut. 0 9 * * * se déclenche alors à
09:00 UTC, pas à votre 09:00 locale. Vérifiez et, si besoin, définissez-le :
timedatectl # voir le fuseau actuel
sudo timedatectl set-timezone Europe/Paris
6. Lisez les journaux
Cron journalise chaque déclenchement. Si vous ne voyez pas votre tâche, c’est qu’elle ne correspond pas :
grep CRON /var/log/syslog # Debian/Ubuntu
journalctl -u cron --since today
Aucune ligne de journal signifie généralement une expression de planning erronée ou la mauvaise crontab.
Le problème de fond : vous l’avez remarqué uniquement parce que vous avez regardé
Chaque correctif ci-dessus suppose que vous êtes allé voir. La tâche qui s’est arrêtée en silence il y a six semaines est celle qui fait mal. Cron n’a aucune notion de succès ou d’échec et ne vous dira pas quand il s’arrête.
Ajoutez un heartbeat : faites pinguer une URL par la tâche à la fin, et soyez alerté dès qu’un ping manque. Une ligne à la fin de votre script :
curl -fsS https://ping.steadycron.com/<votre-jeton-ping>