Ayuda y guíasHeartbeat (cron monitoring) › Añadir al cron job (bash, Python, Node)

Añadir al cron job (bash, Python, Node)

4 min de lectura · Heartbeat (cron monitoring)

Objetivo: Añadir una URL de Heartbeat a una tarea cron o script existente para que ePulz.io reciba un ping de "estoy vivo" tras cada ejecución correcta.

Cómo funciona

Llamas a la URL de Heartbeat tras finalizar correctamente la tarea. Si el script falla, la URL no se llama, ePulz.io detecta el ping ausente y te envía una alerta.

Bash / cron de shell

Añade una llamada curl al final de la línea cron, unida con el operador && (solo se ejecuta si el comando anterior tuvo éxito):

# /etc/crontab o crontab -e
0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 \
  https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj > /dev/null

Significado de las opciones de curl:

  • -f = fallar ante una respuesta de error (curl devuelve un error)
  • -s = silencioso (no muestra el progreso)
  • -S = pero muestra los errores (combinado con -s)
  • -m 10 = límite de tiempo de 10 segundos
  • > /dev/null = evita que la respuesta sature el registro de cron

Python

Para scripts de Python, añade la llamada mediante la biblioteca requests o el módulo estándar urllib:

import os
import requests

HEARTBEAT_URL = os.environ.get("HEARTBEAT_URL")

def sync_data():
    # ... tu logica ...
    pass

try:
    sync_data()
    # El heartbeat se envia solo si sync_data() no falla
    if HEARTBEAT_URL:
        requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
    # El heartbeat no se envia - ePulz.io te alertara
    print(f"Sync failed: {e}")
    raise

Sin biblioteca externa, solo con la estándar:

import urllib.request

# Tras finalizar correctamente la tarea
urllib.request.urlopen("https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj", timeout=10)

Node.js

const HEARTBEAT_URL = process.env.HEARTBEAT_URL;

async function nightlyJob() {
  await processInvoices();
  // Heartbeat solo tras finalizar correctamente
  await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}

nightlyJob().catch(err => {
  console.error(err);
  process.exit(1);  // El heartbeat no se envia, ePulz.io te alertara
});

Docker / temporizador systemd

Al usar un temporizador systemd, añade la línea ExecStartPost al archivo .service:

# /etc/systemd/system/db-backup.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
ExecStartPost=/usr/bin/curl -fsS -m 10 https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj

ExecStartPost solo se ejecuta si ExecStart finalizó correctamente.

Planificador PHP / Laravel

// app/Console/Kernel.php
$schedule->command('backup:run')
    ->daily()
    ->thenPing('https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj');

Laravel tiene un método thenPing() integrado precisamente para este fin.

Prueba - simular una sola ejecución

Antes de añadirla a cron, prueba la URL manualmente:

$ curl -fsS https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj
OK

Tras una llamada correcta, en el resumen de ePulz.io verás cómo el estado del monitor cambia de Esperando a OK.

¿Te ha resultado útil esta guía?