Peringatan Kegagalan Cron Job: Dapatkan Panggilan Telepon saat Tugas Terjadwal Mati

Cron job gagal tanpa suara. Pelajari tiga pola andal untuk mendeteksi tugas terjadwal yang gagal atau terlewat dan dapatkan notifikasi push atau panggilan telepon dalam hitungan detik.

Diperbarui

Daftar Isi

Hal yang berbahaya dari cron job yang gagal adalah tidak terjadi apa-apa. Tidak ada halaman error, tidak ada crash, tidak ada pengguna yang marah — hanya backup yang diam-diam berhenti berjalan tiga minggu lalu, laporan yang tidak pernah terkirim, atau skrip pembersihan yang membiarkan disk penuh sampai produksi tumbang.

Cron sendiri tidak punya sistem peringatan bawaan. Kalau sebuah tugas keluar dengan error, cron cuek saja. Kalau seluruh server mati pada jam yang dijadwalkan, tugas itu memang tidak pernah berjalan, dan tidak ada jejak yang memberi tahu Anda. Kasus kedua inilah yang paling sering luput dari kebanyakan penyiapan pemantauan.

Panduan ini membahas tiga pola untuk menangkap kedua jenis kegagalan tersebut, dan cara membuat peringatannya mustahil terlewat dengan mengeskalasikannya menjadi panggilan telepon sungguhan lewat Echobell.

Pola 1: Peringatan saat gagal dengan hook kode keluar

Pendekatan paling sederhana: kirim webhook setiap kali tugas keluar dengan status bukan nol.

Pertama, buat sebuah saluran di Echobell lalu salin URL webhook-nya. Kemudian bungkus perintah cron Anda:

0 3 * * * /opt/scripts/backup.sh || curl -s "https://hook.echobell.one/t/<channel-token>?title=Backup+failed&host=$(hostname)"

Jika backup.sh berhasil, tidak terjadi apa-apa. Jika gagal, Echobell mengirim peringatan ke ponsel Anda dalam hitungan detik. Parameter kueri menjadi variabel templat, sehingga notifikasi Anda bisa menyebut persis host dan tugas mana yang gagal.

Untuk skrip yang lebih panjang, sebuah trap memberi Anda konteks yang lebih kaya:

#!/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

# ... logika tugas Anda ...

Keterbatasannya: cara ini hanya bekerja kalau skripnya benar-benar berjalan lalu gagal. Kalau server mati, cron salah konfigurasi, atau ada orang yang mengomentari barisnya saat sesi debugging, tidak ada peringatan yang pernah terkirim. Karena itulah Anda juga butuh pola 2.

Pola 2: Dead man's switch untuk jalannya tugas yang terlewat

Dead man's switch membalik logikanya: tugas mengirim ping ke sebuah monitor saat berhasil, dan monitor itu memperingatkan Anda ketika ping tidak datang sesuai jadwal. Cara ini menangkap semua mode kegagalan — error, hang, server mati, sampai entri crontab yang terhapus.

Dua pilihan populer yang bisa di-host sendiri bekerja baik bersama Echobell:

  • Healthchecks.io dibuat persis untuk ini. Buat sebuah check dengan jadwal cron dan masa tenggang Anda, lalu tambahkan && curl -s https://hc-ping.com/YOUR_UUID di akhir baris cron Anda. Saat sebuah ping terlambat, Healthchecks mengirim webhook — arahkan ke saluran Echobell Anda untuk mengubah backup yang terlewat menjadi telepon yang berdering.
  • Uptime Kuma punya jenis monitor "Push" yang bekerja dengan cara sama: tugas Anda memanggil sebuah URL push, dan Uptime Kuma memberi peringatan lewat integrasi notifikasinya saat detak jantung itu berhenti datang.

Pada kedua kasus, alurnya adalah: cron job → ping keberhasilan → monitor menyadari kesunyian → webhook ke Echobell → notifikasi push atau panggilan telepon.

Pola 3: Pemeriksaan jendela waktu untuk tugas yang melaporkan data

Sebagian tugas lebih baik diverifikasi lewat keluarannya ketimbang kode keluarnya. Jika ETL malam Anda semestinya memasukkan baris data sebelum pukul 4 pagi, sebuah tugas verifikasi kecil bisa memeriksa jumlah baris lalu memanggil webhook Echobell ketika angkanya terlihat janggal.

Kondisi di Echobell membantu di sini: Anda bisa mengirim webhook status setiap kali tugas berjalan dan membiarkan saluran yang menentukan kapan harus memberi notifikasi. Kondisi seperti status != "ok" membuat jalannya tugas yang sukses tetap senyap, dan variabel waktu UTC bawaan memungkinkan Anda membatasi peringatan hanya pada jendela waktu ketika tugas itu seharusnya sudah selesai.

Membuat peringatan mustahil terlewat

Deteksi baru separuh masalah. Peringatan kegagalan backup yang muncul sebagai spanduk senyap pukul 3 pagi sama saja dengan tidak ada peringatan.

Echobell memungkinkan setiap saluran memilih tingkat urgensinya:

  • Normal — notifikasi push standar, cocok untuk tugas yang sifatnya informatif
  • Peka waktu — menembus Mode Fokus iOS, tepat untuk tugas yang harus segera dilihat seseorang
  • Panggilan — ponsel Anda berdering seperti panggilan telepon sungguhan sampai Anda menyadarinya

Untuk tugas yang kegagalannya secara diam-diam merugikan uang sungguhan — backup basis data, proses penagihan, perpanjangan sertifikat — setel salurannya ke Panggilan. Selisih antara "melihatnya pukul 3 pagi" dan "melihatnya pukul 9 pagi" persis itulah bedanya yang dibuat peringatan panggilan telepon.

Jika beberapa orang berbagi tanggung jawab atas sebuah tugas, bagikan tautan langganan salurannya ke tim; semua yang berlangganan menerima peringatan yang sama pada saat yang sama.

Pola mana yang sebaiknya Anda pakai?

  • Hook kode keluar: penyiapan lima menit, menangkap kegagalan yang eksplisit. Mulailah dari sini.
  • Dead man's switch: juga menangkap tugas yang terlewat dan hang. Tambahkan untuk setiap tugas yang benar-benar tidak boleh Anda lewatkan.
  • Pemeriksaan data per jendela waktu: untuk pipeline yang risikonya nyata bila "berjalan sukses tapi menghasilkan data sampah".

Ketiganya berpadu dengan baik: hook kode keluar memberi tahu Anda sebuah tugas gagal beserta alasannya, sementara dead man's switch menjamin Anda tetap mendengar kabar tentang kegagalan yang tidak sempat melaporkan dirinya sendiri.

Siapkan peringatan cron pertama Anda dalam beberapa menit: unduh Echobell, buat sebuah saluran, lalu tambahkan satu curl ke crontab Anda. Lain kali sebuah tugas terjadwal mati pukul 3 pagi, ponsel Anda akan berdering — dan backup yang Anda pulihkan kuartal depan benar-benar ada.