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;-dmet en surbrillance les différences;-cconserve les couleurs ANSI;-tmasque l’en-tête;-pcadence précise.-gfait sortirwatchdès que la sortie change (pratique pour attendre un déploiement);-esort sur erreur de la commande.- gardez la sortie courte (head, sed -n) pour une lecture confortable;
watchn’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é).