Comment Détecter un Cron Silencieux

Ne laissez plus jamais un cron échouer silencieusement sans le savoir

Un cron "silencieux" représente l'un des problèmes les plus insidieux en administration système. Contrairement à un cron qui échoue avec une erreur visible, le cron silencieux cesse simplement de s'exécuter sans générer aucun message d'erreur. Aucun email d'alerte, aucun log d'erreur, aucune notification : le cron disparaît dans l'ombre pendant que vos données deviennent obsolètes.

Ce problème est particulièrement vicieux car il peut passer inaperçu pendant des jours, voire des semaines. Combien de fois avez-vous découvert qu'un backup ne s'exécutait plus depuis deux semaines ? Ou qu'un import quotidien était arrêté depuis une semaine, laissant vos données client incomplètes ? Ces situations sont bien plus fréquentes qu'on ne le pense.

La solution réside dans le monitoring de type "heartbeat" : au lieu d'attendre une erreur qui ne viendra jamais, vous attendez activement un signal de vie. Si ce signal (ping) n'arrive pas dans les temps, vous êtes alerté. MoniTao implémente ce pattern pour vous protéger contre les crons silencieux.

Symptômes d'un Cron Silencieux

Plusieurs indices peuvent révéler qu'un cron a cessé de fonctionner silencieusement :

  • Données obsolètes : Les imports de données ne se mettent plus à jour. Les clients voient des informations d'hier, avant-hier, ou pire. Ce symptôme est souvent découvert par les utilisateurs finaux, causant une perte de confiance.
  • Emails non envoyés : Les rapports quotidiens, les notifications programmées, les newsletters ne partent plus. Le silence des emails n'alerte personne car... c'est du silence.
  • Sauvegardes manquantes : Le backup nocturne ne s'exécute plus. Vous ne le découvrez qu'au moment où vous avez besoin de restaurer, quand il est trop tard.
  • Accumulation anormale : Les fichiers temporaires s'accumulent, les logs grossissent, les bases de données ne sont plus nettoyées. Le symptôme devient visible quand le disque est plein.

Causes Fréquentes des Crons Silencieux

Comprendre les causes permet de prévenir les récidives :

  • Crontab supprimée ou écrasée : Un crontab -e maladroit, un script d'automatisation qui réinitialise la crontab, ou une migration de serveur qui oublie les crons. La tâche n'existe plus mais personne n'est averti.
  • Service cron désactivé : Après un redémarrage, le service crond peut ne pas démarrer automatiquement. Tous les crons du serveur cessent silencieusement.
  • Script déplacé ou supprimé : Le chemin vers le script a changé, le fichier a été supprimé lors d'un nettoyage, ou les permissions ont été modifiées. Le cron s'exécute mais ne fait rien.
  • Variables d'environnement : Le cron s'exécute dans un environnement minimal. PATH, HOME, ou des variables personnalisées peuvent manquer, causant un échec silencieux.

Diagnostiquer un Cron Silencieux

Face à un cron suspect, suivez cette méthodologie de diagnostic :

  1. Vérifier la crontab : Exécutez crontab -l pour l'utilisateur concerné. Vérifiez que la ligne existe, que la syntaxe est correcte, et que le chemin du script est absolu.
  2. Consulter les logs : Examinez /var/log/cron ou journalctl -u cron selon votre système. Cherchez les entrées correspondant à votre tâche pour confirmer si elle démarre.
  3. Exécuter manuellement : Lancez le script à la main avec le même utilisateur que le cron. Comparez les résultats avec une exécution depuis cron pour isoler les différences d'environnement.
  4. Vérifier les sorties : Redirigez stdout et stderr vers un fichier de log. Ajoutez des instructions echo/logging au début et à la fin du script pour tracer son exécution.

Exemple de Détection avec MoniTao

Voici comment intégrer un heartbeat MoniTao pour détecter un cron silencieux :

#!/bin/bash
# Script: /home/scripts/import-data.sh

set -e  # Arrêter sur erreur

echo "[$(date)] Début de l'import..."

# Votre logique métier
/usr/bin/php /var/www/app/import.php

# Ping MoniTao seulement si le script a réussi
if [ $? -eq 0 ]; then
    curl -fsS --max-time 10 \
        "https://api.monitao.com/ping/votre-token" \
        -d '{"status": "success"}' \
        -H "Content-Type: application/json"
    echo "[$(date)] Import terminé avec succès, ping envoyé"
else
    echo "[$(date)] Import échoué, pas de ping"
    exit 1
fi

Ce script ping MoniTao uniquement en cas de succès. Si le script ne s'exécute pas du tout (cron silencieux), ou s'il échoue, aucun ping n'est envoyé. MoniTao vous alerte après le délai de grâce configuré, vous informant que quelque chose ne va pas.

Automatiser la Détection

MoniTao offre plusieurs approches pour automatiser la détection des crons silencieux :

  • Heartbeat basique : Ajoutez un curl à la fin de chaque cron critique. Configurez l'intervalle attendu dans MoniTao (ex: 24h pour un cron quotidien). Alerte si le ping manque.
  • Ping conditionnel : Utilisez && pour ne ping que si la commande précédente réussit : ./script.sh && curl URL. Ainsi, un échec silencieux (return code non-zéro) ne déclenche pas de ping.
  • Wrapper script : Créez un wrapper qui encapsule n'importe quel cron, gère les erreurs, et ping MoniTao. Réutilisable pour tous vos crons.
  • Période de grâce : Configurez une marge après l'intervalle attendu. Un cron quotidien à 2h peut prendre 30 minutes : configurez un timeout de 25h pour éviter les fausses alertes.

Bonnes Pratiques Anti-Cron Silencieux

Adoptez ces pratiques pour minimiser les risques de crons silencieux :

  • Un heartbeat par cron critique : Identifiez vos crons à impact métier (backups, imports, synchros) et créez un heartbeat dédié pour chacun. N'utilisez pas un heartbeat générique pour plusieurs crons.
  • Timeouts appropriés : Calculez le timeout comme : intervalle du cron + durée max d'exécution + 10% de marge. Un cron horaire qui prend 5 minutes mérite un timeout de ~70 minutes.
  • Logging systématique : Redirigez toujours stdout et stderr vers des fichiers de log. Même si MoniTao détecte l'absence, les logs aident au diagnostic.
  • Tests réguliers : Testez périodiquement vos alertes en désactivant temporairement un cron. Vérifiez que l'alerte arrive dans le délai attendu.

Checklist Anti-Cron Silencieux

  • Lister tous les crons critiques de l'infrastructure
  • Créer un heartbeat MoniTao par cron critique
  • Ajouter le ping conditionnel (&&) à chaque cron
  • Configurer des timeouts appropriés avec marge
  • Rediriger stdout/stderr vers des fichiers de log
  • Tester les alertes en désactivant un cron de test

Questions Fréquentes

Comment identifier quels crons sont critiques et méritent un monitoring ?

Un cron est critique si son absence aurait un impact métier visible : backups (perte de données), imports (données obsolètes), envoi d'emails (communication interrompue), synchronisations (désalignement des systèmes). Priorisez ceux dont l'échec coûterait le plus cher en temps ou argent.

Le ping curl ajoute-t-il de la latence significative à mes crons ?

Le ping prend généralement 50-200ms selon la latence réseau. Pour un cron qui dure plusieurs minutes, c'est négligeable. Pour les crons ultra-rapides (< 1 seconde), vous pouvez utiliser l'option --max-time pour limiter l'attente et éviter qu'un problème réseau ne bloque le cron.

Mon serveur n'a pas accès à internet. Comment surveiller mes crons ?

Deux options : 1) Configurez un proxy sortant pour les appels HTTP vers MoniTao. 2) Utilisez un serveur intermédiaire qui a accès internet et qui relaie les pings. Le serveur de cron ping le relai local, qui ping MoniTao.

J'ai le même cron sur 3 serveurs. Comment gérer les heartbeats ?

Cela dépend de votre architecture : si les 3 serveurs doivent tous exécuter le cron, créez 3 heartbeats distincts (un par serveur). Si un seul doit s'exécuter (ex: master/slave), créez un seul heartbeat et assurez-vous que seul le master ping.

Comment différencier un cron silencieux d'un cron qui échoue ?

Un cron silencieux ne s'exécute pas du tout (aucun log, aucune trace). Un cron qui échoue s'exécute mais retourne une erreur. Avec MoniTao, utilisez le ping conditionnel (&&) : pas de ping = soit silencieux, soit échec. Vos logs internes permettent de différencier.

Puis-je être alerté sur Slack ou Teams au lieu d'un email ?

Oui, MoniTao supporte plusieurs canaux d'alerte : email, Slack, Discord, webhooks personnalisés, et plus. Configurez vos préférences dans les paramètres de notification de votre compte. Vous pouvez même combiner plusieurs canaux pour les crons les plus critiques.

Ne Laissez Plus les Crons Disparaître

Les crons silencieux sont des bombes à retardement. Ils cessent de fonctionner sans bruit, accumulant une dette technique invisible jusqu'au jour où les conséquences deviennent évidentes : données perdues, clients frustrés, incidents de production. La prévention est infiniment moins coûteuse que la réparation.

Le monitoring heartbeat inverse le paradigme : au lieu d'attendre des erreurs qui ne viennent jamais, vous attendez des signaux de vie. Leur absence déclenche l'alerte. Avec MoniTao, mettez en place cette protection en quelques minutes pour chacun de vos crons critiques, et dormez tranquille.

Prêt à dormir sur vos deux oreilles ?

Commencez gratuitement, sans carte bancaire.