Cron job'a ekleme

4 dk okuma · Heartbeat (cron izleme)

Amaç: Mevcut bir cron job'a veya komut dosyasına heartbeat URL ekleyerek ePulz.io'nun her başarılı çalıştırmadan sonra "hayattayım" ping'i almasını sağlayın.

Prensip

Heartbeat URL'yi görevin başarılı tamamlanmasından sonra çağırırsınız. Komut dosyası başarısız olursa, URL çağrılmaz, ePulz.io eksik ping'i fark eder ve size uyarı gönderir.

Bash / shell cron

Cron satırınızın sonuna curl çağrısını && operatörüyle ekleyin:

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

curl flag'leri:

  • -f = 2xx olmayan yanıtta başarısız (curl hata döner)
  • -s = silent (progress yazmaz)
  • -S = ama hataları gösterir (-s ile kombinasyon)
  • -m 10 = max-time 10 saniye (timeout)
  • > /dev/null = yanıt cron log'u doldurmaz

Python

Python komut dosyaları için requests veya urllib üzerinden çağrı ekleyin:

import os
import requests

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

def sync_data():
    # ... mantığınız ...
    pass

try:
    sync_data()
    # Heartbeat yalnızca sync_data() istisna fırlatmazsa gönderilir
    if HEARTBEAT_URL:
        requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
    # Heartbeat gönderilmez - ePulz.io size uyarı yapar
    print(f"Sync failed: {e}")
    raise

Harici kütüphane olmadan, yalnızca standart ile:

import urllib.request

# Görevin başarılı tamamlanmasından sonra
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 yalnızca başarılı tamamlamadan sonra
  await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}

nightlyJob().catch(err => {
  console.error(err);
  process.exit(1);  // Heartbeat gönderilmez, ePulz.io size uyarı yapar
});

Docker / systemd timer

systemd timer için, .service dosyasına ExecStartPost ekleyin:

# /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 yalnızca ExecStart başarılı olduğunda çalışır.

PHP / Laravel scheduler

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

Laravel'in tam bu amaç için yerleşik thenPing() metodu vardır.

Gelişmiş: başlangıç ve sonda ping

Daha kapsamlı tespit için "start" ping de gönderebilirsiniz (görev başladı) - böylece "görev hiç başlamadı" ile "görev takıldı" arasında ayırım yapabilirsiniz:

# Start ping
curl -fsS -m 10 https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj/start > /dev/null

# Göreviniz
/usr/local/bin/backup.sh
EXIT_CODE=$?

# Done ping with exit code
curl -fsS -m 10 "https://epulz.io/heartbeat/Qs78OPNIIsCF_-Vj?exit=$EXIT_CODE" > /dev/null

Test - bir çalıştırma simülasyonu

Cron'a eklemeden önce URL'yi manuel olarak test edin:

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

Başarılı çağrıdan sonra ePulz.io dashboard'unda monitör durumunun Pending'den OK'a geçtiğini göreceksiniz.