Cron Görevi İzleme

Zamanlanmış görevlerinizin çalışmayı ne zaman durdurduğunu hemen öğrenin. Yedeklemeler, sıra çalışanları, ETL görevleri, saatlik senkronizasyonlar - hepsi sessizce izlenir.

Bir heartbeat izleyici ekle →

Uptime İzleme - DiagnoSEO

Zamanlanmış görevlerle ilgili sorun

Cron’ların zalim bir özelliği vardır: Çöktüklerinde bunu kimse sana söylemez. Web uygulaması hala istekleri yanıtlar, ana sayfa gayet düzgün görünür, izleme araçları yeşil ışıkta - ama bir yerlerde sunucuda gece yedeği iki haftadır çalışmamış. Queue worker deploy’dan sonra düştü ve bekleyen işler birikiyor. Saatlik senkronizasyon sessizce satırları kaybediyor yetki sorunları nedeniyle. Ancak bir şey downstream’de sonunda çökünce haberin olur - genellikle de tam da ona en çok ihtiyacın olan anda. Veri ekibi dışa aktarım ister, destek ekibi e-posta kuyruğu, operasyonlar yedek ister. O zaman ise artık çok geçtir.

Standart uptime izleme bunu yakalayamaz, çünkü ping atabileceği bir şey yoktur. Cron bir HTTP endpoint’i açmaz, port dinlemez, sunucu başlatmaz. Çalışır, biter, biter. Eğer çalışmazsa - varlığının eksikliğine dair hiçbir sinyal yok, ta ki sen aramaya başlayana kadar.

Ters desen: heartbeat izleme

Heartbeat izleme (aynı zamanda "dead man's switch" veya "cron izleme" olarak da bilinir) yönü tersine çevirir. Bizim senin hizmetini kontrol etmemiz yerine, senin hizmetin bize haber verir. Cron’a tek satır eklersin - oluşturduğumuz benzersiz bir URL'ye curl çağrısı - bu URL her çarpışmada bir zaman damgası kaydeder. Biz bu ping’lerin yokluğunu takip ederiz. Eğer URL beklenen aralıkta (artı tolerans) pinglenmezse, bir çalıştırmanın atlandığına karar verir ve uyarı yollarız.

Model basit, güvenilir ve dilden bağımsızdır. HTTP isteği yapabilen her şey entegre olur. Bash ile curl, Python ile requests, Node ile fetch, PHP ile curl_init, Windows’ta Görev Zamanlayıcı ile Invoke-WebRequest, GitHub Actions, Kubernetes CronJobs, Lambda zamanlanmış event’ler - hangisi olursa. SDK yok, ajan yok, kuracak daemon yok.

Nasıl kurulur

DiagnoSEO Uptime Monitoring içinde "Monitör ekle"yi tıkla, tür olarak "Heartbeat / cron" seç. Araç benzersiz bir token’lı URL oluşturur - https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9 gibi bir şey. Beklenen aralığı (job’un hangi sıklıkta çalışacağı, dakika cinsinden) ve toleransı (koşunun ne kadar gecikince alarm vermemiz gerektiği) belirle. Kaydet.

Şimdi cron’unu değiştir ve her başarılı çalıştırma sonrası bu URL’ye ping atsın. Ortama göre üç stil:

# Bash cron - sadece başarı sonrası ping
0 3 * * * /usr/bin/backup.sh && curl -fsS https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9 > /dev/null

# Ya da kısmi başarı kabul edilebiliyorsa
0 3 * * * /usr/bin/backup.sh; curl -fsS https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9 > /dev/null

# Python
import requests
def main():
    do_the_work()
    requests.get('https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9', timeout=5)

# GitHub Actions
- name: Notify heartbeat
  if: success()
  run: curl -fsS https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9

Bundan sonra, her başarılı çalıştırma bizi pingler ve biz zaman damgasını kaydederiz. Ping’i aralık + tolerans dakikası içinde almazsak bir olay açılır ve tüm aktif kanallarına bildirim gider: E-posta, Telegram, Slack, Discord, SMS.

Aralık ve tolerans seçimi

Aralık, işin zaman çizelgesine tam uymalıdır. Gece yedeği saat 3:00'te - aralık 1440 dakika (24 sa). Saatlik senkronizasyon - 60. 5 dakikada bir çalışan worker - 5.

Tolerans, doğal gecikmeleri absorbe eder. Cron’lar tam nanosekunda zamanında çalışmaz - sıraya girer, önceki koşunun bitmesini bekler, kısa süreli hatalarda bekler. 1 saatlik toleranslı 24 saatlik bir iş, bildirimleri geciktirmeden konforlu bir tampon oluşturur. 2 dakikalık toleranslı 5 dakikalık worker, gerçek çöküşleri hızlıca yakalar, yarım dakikalık kısa kesintilerde yanlış alarmları önler. Kaba kural: toleransı işin “şaşkınlığına” göre aralığın %10-50’sine ayarla.

Önerdiğimiz kalıplar

  • Sadece başarı sonrası ping. Bash’te && ile - çöken koşu ping atmaz. Biz ping yokluğunu tespit edip alarm veririz.
  • Her döngü iterasyonu sonrası ping. Uzun süre çalışan worker’lar için her başarılı iş birimi sonrası, döngü içinde ping at; sonda değil. Böylece takılan bir worker koşu sırasında tespit edilir.
  • Her mantıksal iş için bir heartbeat, script için değil. Üç script birlikte tek bir gece pipeline’ıysa, zincirin sonunda tek ping at. Bu, “pipeline canlı mı” sinyalini net verir.
  • Loglarla birleştir. Heartbeat işin çalıştığını söyler. Uygulama logları ne yaptığını gösterir. Birlikte tam resim olur.

Heartbeat kaybolduğunda ne olur

Süre dolduğunda olay açılır. Panel monitörü kırmızı ve “X dakikadır heartbeat yok” hatasıyla gösterir. Bildirimler tüm aktif kanallara gider. Yeni heartbeat gelirse monitor otomatik tekrar “up” duruma döner, olay kapanır ve (kurtarma uyarıların açıksa) “tekrar online” bildirimi alırsın.

Tüm bunlar, diğer monitörlerle aynı şekilde ele alınır - heatmap, uptime yüzdesi, geçmiş, etiketler, arama, dışa aktarım. Panelde heartbeat monitörü de sadece bir satırdır, HTTP, ping, port ve API yanında sıralanabilir ve filtrelenebilir.

Kontrol listesi

Monitor ekle → Heartbeat türü seç → oluşturulan URL’i kopyala → cron / worker / zamanlayıcıya ekle → aralık ve toleransı belirle → kaydet → tamam. Artık zamanlanmış görev çalışmazsa anında haberin olur - bu uzun vadede izleme ile ilgili alabileceğin en kritik kararlardan biridir.

Sıkça Sorulan Sorular

  • Tersine izleme — zamanlanmış görevin başarılı şekilde çalıştıkça bizim URL’mizi pingler. Beklenen aralıkta ping gelmezse seni uyarırız. Sessiz hatalara çözüm olur: bozuk bir cron job hata üretmez ve klasik uptime alarmını tetiklemez.

  • Cron komutunun sonuna curl -fsS <heartbeat_url> ekle. Önceki komut başarısız olursa curl çalışmaz ve heartbeat atlanır. Alternatif olarak başta ve sonda farklı yollarla ping atabilirsin: bu şekilde “başladı” ve “tamamlandı” sinyalleri ayrı ayrı alınır.

  • Tipik görevin çalışma süresinin 2-3 katı kadar. Günlük yedeğin 30 dakika sürüyorsa toleransı 90 dakika yap — yavaşlamaları dikkate alır, yanlış alarmları önler. Süresi değişken işler için toleransı bol tut ve panelden uç noktaları tespit et.

  • Evet — aralığı uygun şekilde ayarla (ör. 60 dakika bekleniyor, 15 dakika tolerans). Monitör minimum 75 dakikada bir ping bekler. Görev daha sık ise (ör. 5 dakika) heartbeat URL’si onu da destekler — ayarı sadece aralığa uygun yap.

  • Evet. Lambda fonksiyonunun sonunda heartbeat URL’sine dışa HTTP isteği ekle. İzleme aynen cron heartbeat gibi davranır — aynı alarmlar, aynı tolerans. Planlı Lambda’lar için özellikle yararlıdır, çünkü CloudWatch alarmları bazı sessiz çalıştırma hatalarını yakalayamaz.

Bir heartbeat izleyici ekle →

Daha Yüksek Sıralama ve Kaliteli Trafiğin Kilidini Açın

SEO ve içerik pazarlaması için 1 numaralı yapay zeka destekli tam kapsamlı yazılımla işinizi büyütün.

Advanced'a yükselt