Aiuto e guideHeartbeat (cron monitoring) › Aggiungi al cron job

Aggiungi al cron job

4 min di lettura · Heartbeat (cron monitoring)

Obiettivo: Aggiungere un URL Heartbeat a un cron job o a uno script esistente affinché ePulz.io riceva un ping "sono vivo" dopo ogni esecuzione riuscita.

Principio

Chiami l'URL Heartbeat dopo il completamento corretto dell'attività. Se lo script fallisce, l'URL non viene chiamato, ePulz.io nota il ping mancante e ti invia un avviso.

Bash / cron shell

Aggiungi una chiamata curl alla fine della riga cron, collegata con l'operatore && (viene eseguita solo se il comando precedente ha avuto successo):

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

Significato delle opzioni curl:

  • -f = fallire in caso di risposta di errore (curl restituisce un errore)
  • -s = silenzioso (non mostra l'avanzamento)
  • -S = ma mostra gli errori (in combinazione con -s)
  • -m 10 = limite di tempo di 10 secondi
  • > /dev/null = la risposta non intasa il log di cron

Python

Per gli script Python, aggiungi la chiamata tramite la libreria requests o il modulo standard urllib:

import os
import requests

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

def sync_data():
    # ... la tua logica ...
    pass

try:
    sync_data()
    # L'heartbeat viene inviato solo se sync_data() non fallisce
    if HEARTBEAT_URL:
        requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
    # L'heartbeat non viene inviato - ePulz.io ti avvisera
    print(f"Sync failed: {e}")
    raise

Senza libreria esterna, solo con quella standard:

import urllib.request

# Dopo il completamento corretto dell'attivita
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 dopo il completamento corretto
  await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}

nightlyJob().catch(err => {
  console.error(err);
  process.exit(1);  // L'heartbeat non viene inviato, ePulz.io ti avvisera
});

Docker / timer systemd

Quando usi un timer systemd, aggiungi la riga ExecStartPost al file .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 viene eseguito solo se ExecStart è terminato con successo.

Scheduler PHP / Laravel

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

Laravel ha un metodo thenPing() integrato esattamente per questo scopo.

Test - simulare una singola esecuzione

Prima di inserirlo in cron, testa l'URL manualmente:

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

Dopo una chiamata riuscita, nella panoramica di ePulz.io vedrai lo stato del monitor passare da In attesa a OK.

Questa guida è stata utile?