Pomoc i poradnikiHeartbeat (monitoring cron) › Dodanie do cron job (bash, Python, Node)

Dodanie do cron job (bash, Python, Node)

4 min czytania · Heartbeat (monitoring cron)

Cel: Dodać adres Heartbeat do istniejącego zadania cron lub skryptu, aby ePulz.io otrzymywał ping "żyję" po każdym udanym uruchomieniu.

Zasada działania

Adres Heartbeat wywołujesz po pomyślnym zakończeniu zadania. Jeśli skrypt zawiedzie, adres nie zostanie wywołany, ePulz.io zauważy brakujący ping i wyśle Ci powiadomienie.

Bash / shell cron

Dodaj wywołanie curl na końcu linii cron, połączone operatorem && (uruchomi się tylko przy powodzeniu poprzedniego polecenia):

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

Znaczenie przełączników curl:

  • -f = zakończ błędem przy odpowiedzi błędu (curl zwraca błąd)
  • -s = cicho (nie wypisuje postępu)
  • -S = ale pokazuje błędy (w połączeniu z -s)
  • -m 10 = limit czasu 10 sekund
  • > /dev/null = odpowiedź nie zaśmieca logu cron

Python

W przypadku skryptów Python dodaj wywołanie przez bibliotekę requests lub standardowe urllib:

import os
import requests

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

def sync_data():
    # ... twoja logika ...
    pass

try:
    sync_data()
    # Heartbeat zostanie wysłany tylko jeśli sync_data() nie zakończy się błędem
    if HEARTBEAT_URL:
        requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
    # Heartbeat nie zostanie wysłany - ePulz.io Cię powiadomi
    print(f"Sync failed: {e}")
    raise

Bez zewnętrznej biblioteki, tylko ze standardową:

import urllib.request

# Po pomyślnym zakończeniu zadania
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 dopiero po pomyślnym zakończeniu
  await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}

nightlyJob().catch(err => {
  console.error(err);
  process.exit(1);  // Heartbeat nie zostanie wysłany, ePulz.io Cię powiadomi
});

Docker / timer systemd

Przy użyciu timera systemd dodaj do pliku .service linię ExecStartPost:

# /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 uruchomi się tylko wtedy, gdy ExecStart zakończył się pomyślnie.

PHP / Laravel scheduler

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

Laravel ma wbudowaną metodę thenPing() dokładnie do tego celu.

Test - symulacja pojedynczego uruchomienia

Przed dodaniem do cron przetestuj adres ręcznie:

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

Po udanym wywołaniu w przeglądzie ePulz.io zobaczysz, jak status monitora zmienia się z Oczekuje na OK.

Czy ten poradnik był pomocny?