İçindekiler
Başarısız bir cron işinin tehlikeli yanı, hiçbir şey olmamasıdır. Hata sayfası yok, çökme yok, öfkeli kullanıcı yok — yalnızca üç hafta önce sessizce çalışmayı bırakmış bir yedekleme, hiç gönderilmemiş bir rapor ya da diski üretim çökene kadar doldurmaya bırakan bir temizlik betiği vardır.
Cron'un kendisinde yerleşik uyarı yoktur. Bir iş hatayla sonlanırsa cron omuz silker. Zamanlanan saatte sunucunun tamamı çalışmıyorsa iş hiç çalışmaz ve size çalışmadığını söyleyecek hiçbir iz kalmaz. İzleme kurulumlarının çoğunun kaçırdığı asıl durum bu ikincisidir.
Bu kılavuz, her iki hata türünü de yakalamak için üç deseni ve uyarıyı Echobell ile gerçek bir telefon aramasına yükselterek nasıl kaçırılamaz hâle getireceğinizi anlatır.
Desen 1: Çıkış koduna bağlı kancayla hata uyarısı
En basit yaklaşım: iş sıfırdan farklı bir durumla sonlandığında bir webhook tetiklemek.
Önce Echobell'de bir kanal oluşturun ve webhook URL'sini kopyalayın. Ardından cron komutunuzu sarmalayın:
0 3 * * * /opt/scripts/backup.sh || curl -s "https://hook.echobell.one/t/<channel-token>?title=Backup+failed&host=$(hostname)"
backup.sh başarılı olursa hiçbir şey olmaz. Başarısız olursa Echobell saniyeler içinde telefonunuza bir uyarı iletir. Sorgu parametreleri şablon değişkenlerine dönüştüğü için bildiriminiz hangi sunucuda hangi işin başarısız olduğunu tam olarak söyleyebilir.
Daha uzun betiklerde bir trap size daha zengin bağlam verir:
#!/usr/bin/env bash
set -euo pipefail
notify_failure() {
curl -s -X POST "https://hook.echobell.one/t/<channel-token>" \
-H "Content-Type: application/json" \
-d "{\"job\":\"nightly-backup\",\"host\":\"$(hostname)\",\"line\":\"$1\"}"
}
trap 'notify_failure $LINENO' ERR
# ... işinizin mantığı ...
Sınırı şu: bu yalnızca betik gerçekten çalışıp başarısız olduğunda işe yarar. Sunucu çalışmıyorsa, cron yanlış yapılandırılmışsa ya da biri hata ayıklama sırasında satırı yorum satırına aldıysa hiçbir uyarı tetiklenmez. Desen 2'yi de istemenizin nedeni budur.
Desen 2: Kaçırılan çalışmalar için ölü adam düğmesi
Ölü adam düğmesi mantığı tersine çevirir: iş başarılı olduğunda bir izleyiciye ping gönderir ve ping zamanında gelmediğinde izleyici sizi uyarır. Bu, tüm hata biçimlerini yakalar — hatalar, takılmalar, çökmüş sunucular ve silinmiş crontab satırları dahil.
Echobell ile iyi çalışan, kendi sunucunuzda barındırabileceğiniz iki popüler seçenek var:
- Healthchecks.io tam olarak bunun için tasarlandı. Cron zamanlamanız ve bir tolerans süresiyle bir kontrol oluşturun, ardından cron satırınızın sonuna
&& curl -s https://hc-ping.com/YOUR_UUIDekleyin. Bir ping geciktiğinde Healthchecks bir webhook gönderir — bunu Echobell kanalınıza yönlendirerek kaçırılan bir yedeklemeyi çalan bir telefona dönüştürün. - Uptime Kuma, aynı şekilde çalışan bir "Push" izleyici türü içerir: işiniz bir push URL'sini çağırır, kalp atışı gelmeyi kestiğinde Uptime Kuma bildirim entegrasyonları üzerinden uyarı verir.
Her iki durumda da akış şudur: cron işi → başarı ping'i → izleyici sessizliği fark eder → Echobell'e webhook → push bildirimi veya telefon araması.
Desen 3: Veri üreten işler için zaman aralığı kontrolleri
Bazı işleri çıkış koduyla değil, ürettikleri çıktıyla doğrulamak daha isabetlidir. Gecelik ETL'iniz sabah 4'e kadar satır eklemeliyse, küçük bir doğrulama işi satır sayısını kontrol edip sayılar tuhaf göründüğünde Echobell webhook'unu çağırabilir.
Burada Echobell'in koşulları işinize yarar: her çalışmadan sonra bir durum webhook'u gönderip ne zaman bildirim verileceğine kanalın karar vermesini sağlayabilirsiniz. status != "ok" gibi bir koşul başarılı çalışmaları sessiz tutar, yerleşik UTC zaman değişkenleri de uyarıları işin bitmiş olması gereken zaman aralığıyla sınırlamanıza olanak tanır.
Uyarıyı kaçırılamaz hâle getirmek
Tespit sorunun yalnızca yarısıdır. Gece 3'te sessiz bir başlık olarak düşen bir yedekleme hatası uyarısı, işlevsel olarak hiç uyarı olmamasıyla aynıdır.
Echobell, her kanal için bir aciliyet seviyesi seçmenize izin verir:
- Normal — standart bir push bildirimi; bilgilendirici işler için uygundur
- Zaman duyarlı — iOS Odak Modu'nu aşar; birinin yakında bakması gereken işler için doğrudur
- Arama — siz fark edene kadar telefonunuz gerçek bir arama gibi çalar
Sessiz bir hatanın gerçek para kaybettirdiği işlerde — veritabanı yedeklemeleri, faturalama çalışmaları, sertifika yenilemeleri — kanalı Arama olarak ayarlayın. "Gece 3'te gördüm" ile "sabah 9'da gördüm" arasındaki fark, tam olarak bir telefon aramalı uyarının yarattığı farktır.
Bir işten birden fazla kişi sorumluysa kanalın abonelik bağlantısını ekiple paylaşın; abone olan herkes aynı uyarıyı aynı anda alır.
Hangi deseni kullanmalısınız?
- Çıkış kodu kancası: beş dakikalık kurulum, açık hataları yakalar. Buradan başlayın.
- Ölü adam düğmesi: kaçırılan ve takılan çalışmaları da yakalar. Yokluğunu gerçekten hissedeceğiniz her iş için ekleyin.
- Zaman aralığı veri kontrolleri: "başarıyla çalıştı ama saçma veri üretti" riskinin gerçek olduğu veri hatları için.
Bu üçü birbirini iyi tamamlar: çıkış kodu kancası bir işin başarısız olduğunu ve nedenini söyler; ölü adam düğmesi ise kendini haber verme şansı hiç olmayan hatalardan haberdar olmanızı garantiler.
İlk cron uyarınızı birkaç dakikada kurun: Echobell'i indirin, bir kanal oluşturun ve crontab'ınıza tek bir curl ekleyin. Zamanlanmış bir iş bir dahaki sefere gece 3'te öldüğünde telefonunuz çalacak — ve gelecek çeyrekte geri yükleyeceğiniz yedek yerinde olacak.