# Monitorizar tareas cron: aviso si dejan de ejecutarse

> Una notificación en el iPhone cuando un cron job, una copia de seguridad o un worker deja de dar señales, y otra cuando vuelve a ejecutarse.

Source: https://honk-honk.app/es/guias/monitorizar-tareas-cron

Una tarea cron que falla puede decírtelo: la [guía de cron](https://honk-honk.app/es/guias/notificaciones-push-cron) te manda una notificación cuando una tarea termina con un error. Una tarea que ni siquiera se ejecuta no puede. La línea del crontab se perdió al cambiar de servidor, la máquina está apagada, el demonio de cron se paró o la tarea se quedó colgada y nunca termina. Nada falla, así que nada se envía, y te enteras el día en que necesitas la copia de seguridad de anoche.

Una señal de vida (heartbeat, en inglés) le da la vuelta a esto, y por eso también se la conoce como dispositivo de hombre muerto (dead man’s switch). La tarea llama a una URL cada vez que se ejecuta. Honk sabe cada cuánto debe llegar esa llamada y, si no llega, abre un problema y te avisa en el iPhone, en el Apple Watch o en el navegador. La siguiente llamada lo cierra.

## Cómo funciona una señal de vida

- **Eliges un intervalo:** cada cuánto debe llegar una señal, desde 1 minuto hasta 1 semana.
- **Y un margen:** cuánto más puede tardar antes de que Honk la dé por retrasada, 5 minutos por defecto. El plazo es la última señal más el intervalo más el margen.
- **Cada señal de vida tiene una URL secreta,** `https://honk-honk.app/hb/…`. Una solicitud `GET`, `POST` o `HEAD` a esa URL cuenta como señal, sin clave ni cabeceras.
- **Cuando vence el plazo,** Honk abre un problema en el proyecto, un Bocinazo largo salvo que elijas otro nivel. Se titula «Copia de seguridad nocturna va con retraso» y su texto es «Sin señal desde 2026-10-14 03:12 UTC. Se espera cada 1 d (+5 min de margen)». Honk lo comprueba al menos una vez por minuto.
- **Un solo problema por incidencia.** Mientras la tarea siga sin dar señales, Honk no añade nada más: no te llega una notificación nueva cada minuto.
- **La siguiente señal lo cierra** con una recuperación, «Copia de seguridad nocturna ha vuelto», que te llega como cualquier otra notificación.

El problema es un evento normal de Honk en el grupo `heartbeat/<slug>`, así que las horas de silencio, lo que hayas silenciado, las Actividades en directo y tus reglas se le aplican como a todo lo demás. Una señal de vida nueva espera su primera llamada y no puede retrasarse antes de recibirla.

## Antes de empezar

- Una cuenta de Honk y un proyecto. De momento, Honk es solo por invitación; si no tienes cuenta, [solicita acceso](https://honk-honk.app/es/solicitar-acceso).
- Permiso para gestionar el proyecto. Lo tienen los propietarios y administradores del espacio de trabajo.
- Que tu plan admita una señal de vida más: un espacio de trabajo puede tener 2 en el plan Free, 20 en Pro y 100 en Team ([planes](https://honk-honk.app/es/precios)).
- `curl` en la máquina que ejecuta la tarea. Está en casi cualquier servidor.

## 1. Crea la señal de vida

En la app web, abre el proyecto, luego **Conexiones**, y elige **Nueva señal**:

- **Nombre:** lo que dirá la notificación, por ejemplo «Copia de seguridad nocturna».
- **Esperar una señal cada:** 5 minutos, 15 minutos, 1 hora, 1 día, 1 semana o, con **Personalizado**, los minutos que quieras.
- **Margen:** ninguno, 1, 5 o 15 minutos, o 1 hora.
- **Nivel si se retrasa:** un Bocinazo largo por defecto, o una Bocina sin parar para las tareas que más importan.

Cuando la hayas guardado, abre **Configurar** y copia la **URL de señal**. Cualquiera que tenga la URL puede enviar señales, así que guárdala como una contraseña. Si se filtra, **URL nueva** la sustituye y la anterior deja de funcionar al instante.

## 2. Envía una señal tras cada ejecución

Añade la llamada después de la tarea con `&&`, para que solo una ejecución correcta envíe la señal:

```sh
0 3 * * * pg_dump -f /backup/app.sql app && curl -fsS -m 10 --retry 3 https://honk-honk.app/hb/… > /dev/null
```

`-fsS` mantiene curl en silencio salvo que algo vaya mal, `-m 10` corta la llamada a los 10 segundos y `--retry 3` aguanta un corte breve de la red. Si la tarea falla, no hay señal, y Honk te avisa en cuanto se agota el margen.

El plazo se cuenta desde la última señal, así que el margen solo tiene que cubrir cuánto varía la duración de la tarea. Si la copia a veces tarda 20 minutos más de lo normal, dale al menos ese margen.

## 3. Informa de un fallo al momento

Para una tarea nocturna, basta con esperar a que venza el plazo. Si quieres enterarte de un fallo en cuanto ocurre, llama a la URL con `/fail` cuando la tarea falle. El texto que envíes en el cuerpo, hasta 1 KiB, pasa a ser el mensaje:

```sh
0 3 * * * pg_dump -f /backup/app.sql app && curl -fsS -m 10 --retry 3 https://honk-honk.app/hb/… > /dev/null || curl -fsS -m 10 --retry 3 --data-raw "pg_dump failed on $(hostname)" https://honk-honk.app/hb/…/fail > /dev/null
```

Honk abre el problema al instante: «Copia de seguridad nocturna ha informado de un fallo». La siguiente señal correcta lo cierra, como antes.

Si la tarea ya informa de sus fallos con el script `honk-cron` de la [guía de cron](https://honk-honk.app/es/guias/notificaciones-push-cron), mantenlo y deja que la señal de vida vigile solo si la tarea se ejecuta. Envía la señal tras cada ejecución, falle o no, con `;` en lugar de `&&`:

```sh
0 3 * * * /usr/local/bin/honk-cron db/backup pg_dump -f /backup/app.sql app; curl -fsS -m 10 --retry 3 https://honk-honk.app/hb/… > /dev/null
```

El script te dice que la tarea falló, con su salida. La señal de vida te dice que ni siquiera se ejecutó.

## Workers, apps y systemd

Cualquier cosa que pueda hacer una solicitud HTTP puede enviar señales: un worker de colas después de cada lote, un script en cualquier lenguaje o un servicio de systemd. El panel **Configurar** de la app web trae líneas listas para crontab y para `OnSuccess=` y `OnFailure=` de systemd. Honk cuenta como mucho una señal cada 10 segundos; las llamadas de más reciben respuesta, pero se ignoran.

El código que ya tiene una clave de ingesta puede usar la API en lugar de la URL. La señal de vida se crea con su primera llamada, así que un worker puede crearse la suya:

```sh
curl -fsS -m 10 --retry 3 https://honk-honk.app/v1/heartbeats/check-in \
  -H "Authorization: Bearer $HONK_KEY" \
  -H "Content-Type: application/json" \
  -d '{"slug":"queue-worker","name":"Queue worker","interval_seconds":300,"grace_seconds":60}'
```

El `slug` identifica la señal de vida dentro del proyecto de la clave. Las llamadas siguientes pueden cambiar su nombre, su intervalo y su margen; el nivel y la pausa se gestionan en la app web. Para informar de un fallo, envía `"status":"fail"` con un `message`.

## Fines de semana, mantenimiento y pausas

Honk espera las señales a intervalos fijos y no lee expresiones cron. Para una tarea que solo se ejecuta entre semana, pon como intervalo la pausa más larga entre ejecuciones (3 días, de viernes a lunes) o añade una línea al crontab que envíe la señal los sábados y domingos.

Antes de un mantenimiento, pulsa **Pausar**. Una señal de vida en pausa no se vigila, y pausarla cierra el problema que esté abierto. **Reanudar** vuelve a poner el reloj en marcha desde ese momento. Eliminar una señal de vida también cierra su problema abierto.

## Señales de vida y avisos de fallo

Responden a dos preguntas distintas, y una tarea importante merece las dos:

- La [guía de cron](https://honk-honk.app/es/guias/notificaciones-push-cron) te dice que la tarea se ejecutó y falló, con su código de salida y su salida.
- Una señal de vida te dice que la tarea no se ejecutó, o que nunca terminó, y cuándo dio señales por última vez.

## Si has usado Healthchecks.io

Es la misma idea: una URL por tarea, un periodo y un margen. Healthchecks.io también puede seguir expresiones cron y calendarios `OnCalendar=` de systemd, y es de código abierto, así que puedes instalarlo en tu propio servidor. Honk no tiene expresiones cron ni una versión para instalar en tu propio servidor. Lo que aporta es que el aviso de una tarea que se queda en silencio llega a la misma bandeja de entrada, con las mismas reglas de notificación, que todo lo demás que gestionas: una notificación por incidencia, una recuperación cuando la tarea vuelve, horas de silencio, Actividades en directo y tu Apple Watch.
