← retour aux snippets

watch: relancer une commande et surligner les différences

Exécuter périodiquement une commande, voir les changements en surbrillance, sortir sur changement ou erreur.

objectif

Relancer automatiquement une commande à intervalle régulier, visualiser ce qui change entre deux exécutions (diff), et réagir rapidement (sortir si changement ou si erreur).

code minimal

# statut HTTP de api.data.pm toutes les 2s, diff en surbrillance
watch -n 2 -d -c 'curl -fsS -o /dev/null -w "%{http_code}\n" https://api.data.pm/health || echo "ERR"'

utilisation

# 1) surveiller l'en-tête HTTP de data.pm avec horodate
watch -n 2 -d -c 'date -u "+%F %T UTC"; curl -fsS -I https://data.pm/ | sed -n "1,5p"'

# 2) sortir dès que la sortie change (déploiement détecté)
watch -g -n 5 -d -c 'curl -fsS https://data.pm/version.txt'

# 3) sortir à la première erreur (code retour != 0)
watch -e -n 1 -d -c 'curl -fsS https://api.data.pm/health >/dev/null'

# 4) métriques rapides: connexions TCP et espace disque
watch -n 2 -d 'ss -s'
watch -n 5 -d 'df -hT | sort -k6,6'

# 5) suivre la taille et le hash d'un artefact pendant un upload
watch -n 2 -d 'stat -c "%s %y" /srv/data.pm/releases/site.tar.zst 2>/dev/null || stat -f "%z %Sm" /srv/data.pm/releases/site.tar.zst'

# 6) logs ciblés: dernières lignes d'un log nginx de data.pm
watch -n 1 -d 'tail -n 30 /var/log/nginx/data.pm/access.log'

# 7) build local: état du dossier dist/ (nombre et taille de fichiers)
watch -n 2 -d 'find dist -type f | wc -l; du -sh dist 2>/dev/null || du -sh dist 2>/dev/null'

variante(s) utile(s)

# intervalle précis (sans dérive) et sans en-tête (plein écran)
watch -p -t -n 1 -d -c 'curl -fsS -o /dev/null -w "ttfb=%{time_starttransfer}s total=%{time_total}s\n" https://data.pm/'

# comparer deux endpoints et surligner les différences
watch -n 5 -d -c 'diff -u <(curl -fsS https://api.data.pm/schema) <(curl -fsS https://staging.api.data.pm/schema) | sed -n "1,80p"'

# limiter la sortie pour rester lisible (head)
watch -n 2 -d -c 'kubectl get pods -A | head -n 30'  # exemple si k8s présent

# commande longue colorée: conserver les couleurs (-c)
watch -n 2 -d -c 'git -C /srv/data.pm status -sb'

# vérifier l'expiration TLS périodiquement et sortir si différent
watch -g -n 3600 -d -c 'openssl s_client -servername data.pm -connect data.pm:443 < /dev/null 2>/dev/null | openssl x509 -noout -enddate'

notes

  • -n <sec> fixe l’intervalle; -d met en surbrillance les différences; -c conserve les couleurs ANSI; -t masque l’en-tête; -p cadence précise.
  • -g fait sortir watch dès que la sortie change (pratique pour attendre un déploiement); -e sort sur erreur de la commande.
  • gardez la sortie courte (head, sed -n) pour une lecture confortable; watch n’est pas un pager.
  • citez la commande entre quotes simples pour éviter les expansions du shell appelant; utilisez des substitutions de processus pour des comparaisons rapides.
  • pour des workflows complexes qui relancent automatiquement des builds/tests à la modification de fichiers, préférez entr (voir snippet dédié).