Ajuda e guiasHeartbeat (cron monitoring) › Adicionar ao cron job

Adicionar ao cron job

4 min de leitura · Heartbeat (cron monitoring)

Objetivo: Adicionar um URL de Heartbeat a uma tarefa cron ou script existente para que o ePulz.io receba um ping de "estou vivo" após cada execução bem-sucedida.

Como funciona

Você chama o URL de Heartbeat após a conclusão bem-sucedida da tarefa. Se o script falhar, o URL não é chamado, o ePulz.io percebe o ping em falta e envia-lhe um alerta.

Bash / cron de shell

Adicione uma chamada curl ao final da linha cron, ligada pelo operador && (só é executada se o comando anterior for bem-sucedido):

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

Significado das opções do curl:

  • -f = falhar perante uma resposta de erro (o curl devolve um erro)
  • -s = silencioso (não mostra o progresso)
  • -S = mas mostra os erros (combinado com -s)
  • -m 10 = limite de tempo de 10 segundos
  • > /dev/null = a resposta não sobrecarrega o registo do cron

Python

Para scripts Python, adicione a chamada através da biblioteca requests ou do módulo padrão urllib:

import os
import requests

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

def sync_data():
    # ... a sua logica ...
    pass

try:
    sync_data()
    # O heartbeat e enviado apenas se sync_data() nao falhar
    if HEARTBEAT_URL:
        requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
    # O heartbeat nao e enviado - o ePulz.io ira alerta-lo
    print(f"Sync failed: {e}")
    raise

Sem biblioteca externa, apenas com a padrão:

import urllib.request

# Apos a conclusao bem-sucedida da tarefa
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 apenas apos a conclusao bem-sucedida
  await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}

nightlyJob().catch(err => {
  console.error(err);
  process.exit(1);  // O heartbeat nao e enviado, o ePulz.io ira alerta-lo
});

Docker / temporizador systemd

Ao usar um temporizador systemd, adicione a linha ExecStartPost ao ficheiro .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 só é executado se o ExecStart tiver terminado com sucesso.

Agendador PHP / Laravel

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

O Laravel tem um método thenPing() integrado precisamente para este fim.

Teste - simular uma única execução

Antes de o adicionar ao cron, teste o URL manualmente:

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

Após uma chamada bem-sucedida, na visão geral do ePulz.io verá o estado do monitor mudar de Em espera para OK.

Este guia foi útil?