El comando watch en Linux: ejecutar comandos periódicamente

Introducción

En el día a día de un administrador de sistemas o un desarrollador, es frecuente necesitar observar cómo evoluciona algún valor o estado del sistema en tiempo real. En lugar de teclear manualmente el mismo comando una y otra vez, Linux dispone de una herramienta sencilla y poderosa: watch. Este programa ejecuta un comando de forma repetida, mostrando su salida en pantalla y actualizándola cada cierto intervalo de tiempo. En este artículo vamos a explorar su funcionamiento, sus opciones más útiles y varios ejemplos prácticos que te ayudarán a sacarle el máximo provecho.

¿Qué es el comando watch?

El comando watch pertenece al paquete procps (en la mayoría de distribuciones viene preinstalado). Su propósito es ejecutar un comando especificado cada N segundos (por defecto cada 2 segundos) y volver a dibujar la salida completa en la terminal. De esta forma, cualquier cambio en la salida se vuelve inmediatamente visible, lo que resulta ideal para monitorizar logs, uso de recursos, estado de procesos, entre otros.

Sintaxis básica

La forma más simple de usar watch es:

watch [opciones] comando [argumentos]

Si no se indica ninguna opción, watch asume un intervalo de 2 segundos y resalta las diferencias entre ejecuciones sucesivas. Por ejemplo, para ver la fecha y hora actualizar cada dos segundos:

watch date

Opciones más útiles

  • -n, –interval SEGUNDOS: Define el intervalo de tiempo entre ejecuciones. Por ejemplo, watch -n 5 df -h actualiza el uso de disco cada cinco segundos.
  • -d, –differences: Resalta los cambios entre la salida actual y la anterior, facilitando la detección de variaciones.
  • -t, –no-title: Suprime la cabecera que muestra el intervalo, el comando y la hora actual, dejando solo la salida pura.
  • -c, –color: Interpreta secuencias de escape de color en la salida del comando, útil cuando el comando genera texto coloreado.
  • -g, –chgexit: Hace que watch termine cuando la salida del comando cambie, permitiendo usarlo en scripts que esperen una condición específica.
  • -p, –precise: Intenta ejecutar el comando exactamente cada N segundos, ajustando el retraso según el tiempo que tardó el comando en ejecutarse.

Ejemplos prácticos

  • Monitorizar el uso de memoria:
    watch -n 1 free -h

    Esto muestra la memoria disponible y usada cada segundo, con unidades legibles.

  • Observar el tamaño de un directorio en crecimiento:
    watch -n 2 du -sh /var/log

    Ideal para detectar cuando un log está creciendo de forma inesperada.

  • Ver procesos que consumen más CPU:
    watch -n 3 "ps -eo pid,comm,%cpu --sort=-%cpu | head -10"

    Nota: el comando completo se coloca entre comillas para que watch lo interprete como una sola orden.

  • Detectar cambios en un archivo de configuración:
    watch -d -n 5 cat /etc/nginx/nginx.conf

    La opción -d resaltará cualquier línea que se modifique entre actualizaciones.

  • Esperar a que un servicio esté activo:
    watch -g systemctl is-active nginx

    Cuando el comando devuelva un resultado diferente (por ejemplo, pasa de «inactive» a «active»), watch finaliza y puedes continuar con el siguiente paso en tu script.

Consejos y buenas prácticas

  • Evita usar watch con comandos que tarden mucho en ejecutarse, ya que el intervalo se suma al tiempo de ejecución y puede causar solapamientos.
  • Combina la opción -p con -n para lograr un intervalo más preciso cuando el comando tiene una duración variable.
  • Si necesitas registrar la salida para análisis posterior, redirige la salida de watch a un archivo: watch -n 10 "date" >> registro.log.
  • Recuerda que watch no sustituye a herramientas de monitoreo más completas (como top, htop o soluciones de métricas como Prometheus), pero es excelente para tareas rápidas y ad‑hoc.

Limitaciones y alternativas

Aunque watch es muy útil, tiene algunas limitaciones:

  • No muestra una gráfica ni historial; solo la salida más reciente.
  • No es adecuado para entornos donde se requiere alta frecuencia de actualización (menos de un segundo) debido al overhead de la terminal.
  • En servidores sin acceso a una terminal interactiva (por ejemplo, mediante SSH con allocation de pseudo‑terminal desactivada), watch puede comportarse de forma inesperada.

Para casos donde se necesita un seguimiento más continuo o se desea almacenar métricas a largo plazo, se pueden considerar alternativas como:

  • while true; do comando; sleep 5; done (un bucle simple).
  • Utilizar telnet o netcat para consultar servicios.
  • Emplear herramientas de monitoreo como vmstat, iostat, dstat o soluciones basadas en agentes.

Conclusión

El comando watch es una joya de la caja de herramientas de Linux que permite convertir cualquier comando en un monitor en tiempo real con apenas unas pocas pulsaciones de tecla. Dominar sus opciones y saber cuándo aplicarlo te ahorrará tiempo y te dará una visión inmediata de lo que está happening en tu sistema. La próxima vez que necesites observar cómo evoluciona un valor, recuerda que watch está ahí para hacer el trabajo pesado por ti.

Esta obra está bajo una Licencia Creative Commons Atribución 4.0 Internacional para Francesc Roig francesc@vivaldi.net .

EspañolesEspañolEspañol