Cron job'a ekleme

4 dk okuma · Heartbeat (cron izleme)

Amaç: Mevcut bir cron görevine veya betiğe bir Heartbeat adresi ekleyerek ePulz.io'nun her başarılı çalışmadan sonra bir "yaşıyorum" pingi almasını sağlamak.

Çalışma prensibi

Heartbeat adresini görevin başarıyla tamamlanmasından sonra çağırırsınız. Betik başarısız olursa adres çağrılmaz, ePulz.io eksik pingi fark eder ve size bir uyarı gönderir.

Bash / shell cron

Cron satırının sonuna && operatörüyle birleştirilmiş bir curl çağrısı ekleyin (yalnızca önceki komut başarılı olursa çalışır):

# /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 seçeneklerinin anlamı:

  • -f = hata yanıtında başarısız ol (curl bir hata döndürür)
  • -s = sessiz (ilerlemeyi yazmaz)
  • -S = ama hataları gösterir (-s ile birlikte)
  • -m 10 = 10 saniye zaman sınırı
  • > /dev/null = yanıt cron günlüğünü doldurmaz

Python

Python betikleri için çağrıyı requests kitaplığı veya standart urllib modülü aracılığıyla ekleyin:

import os
import requests

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

def sync_data():
    # ... sizin mantiginiz ...
    pass

try:
    sync_data()
    # Heartbeat yalnizca sync_data() basarisiz olmazsa gonderilir
    if HEARTBEAT_URL:
        requests.get(HEARTBEAT_URL, timeout=10)
except Exception as e:
    # Heartbeat gonderilmez - ePulz.io sizi uyaracaktir
    print(f"Sync failed: {e}")
    raise

Harici kitaplık olmadan, yalnızca standart kitaplıkla:

import urllib.request

# Gorev basariyla tamamlandiktan 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 yalnizca basarili tamamlanmadan sonra
  await fetch(HEARTBEAT_URL, { signal: AbortSignal.timeout(10000) });
}

nightlyJob().catch(err => {
  console.error(err);
  process.exit(1);  // Heartbeat gonderilmez, ePulz.io sizi uyaracaktir
});

Docker / systemd zamanlayıcı

Bir systemd zamanlayıcı kullanırken .service dosyasına ExecStartPost satırını 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ıyla tamamlandığında çalışır.

PHP / Laravel zamanlayıcı

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

Laravel'in tam da bu amaç için yerleşik bir thenPing() yöntemi vardır.

Test - tek bir çalışmayı simüle etme

Cron'a eklemeden önce adresi elle test edin:

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

Başarılı bir çağrının ardından ePulz.io genel bakışında monitör durumunun Bekliyor durumundan OK durumuna geçtiğini göreceksiniz.

Bu kılavuz yardımcı oldu mu?