Pemantauan Tugas Terjadwal Cron
Ketahui segera saat tugas terjadwal Anda berhenti berjalan. Backup, pekerja antrean, tugas ETL, sinkronisasi per jam - semuanya diawasi secara diam-diam.
Masalah dengan Tugas Terjadwal
Sifat kejam dari cron adalah ketika mereka gagal, tidak ada yang memberi tahu Anda. Aplikasi web masih melayani permintaan, halaman utama terlihat baik-baik saja, monitoring hijau—tapi di suatu tempat di server, backup malam tidak berjalan selama dua minggu. Queue worker mati setelah deploy dan pekerjaan yang tertunda menumpuk. Sinkronisasi setiap jam diam-diam kehilangan baris karena masalah izin. Anda baru mengetahuinya ketika sesuatu di bawah akhirnya gagal—biasanya tepat saat Anda paling membutuhkannya. Tim data ingin ekspor, support antrian email, ops backup. Saat itu sudah terlambat.
Monitoring uptime standar tidak akan menangkap hal ini, karena tidak ada yang bisa di-ping. Cron tidak membuka endpoint HTTP, tidak membuka port, tidak menjalankan server. Hanya berjalan, selesai, selesai. Jika berhenti berfungsi—tidak ada sinyal absennya, sampai Anda mulai mencari.
Pola Terbalik: Monitoring Heartbeat
Monitoring heartbeat (juga dikenal sebagai "dead man's switch" atau "monitoring cron") membalik arah. Alih-alih kami memeriksa layanan Anda, layanan Andalah yang melapor ke kami. Tambahkan satu baris ke cron—curl ke URL unik yang kami buat—dan URL tersebut mencatat timestamp setiap kali menerima ping. Kami mengawasi absennya ping-ping ini. Jika URL tidak diakses dalam interval yang diharapkan (plus margin), kami anggap sebagai satu run terlewat dan mengirim alert.
Modelnya sederhana, andal, dan tidak tergantung bahasa. Apa pun yang dapat melakukan HTTP request—bisa terintegrasi. Bash lewat curl, Python lewat requests, Node lewat fetch, PHP lewat curl_init, Task Scheduler di Windows lewat Invoke-WebRequest, GitHub Actions, Kubernetes CronJobs, Lambda scheduled events—apa saja. Tanpa SDK, tanpa agen, tanpa daemon untuk diinstal.
Cara Konfigurasi
Di DiagnoSEO Uptime Monitoring klik "Tambah monitor", pilih tipe "Heartbeat / cron". Alat ini menghasilkan URL unik dengan token—seperti https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9. Atur interval yang diharapkan (seberapa sering job dijalankan, dalam menit) dan margin (berapa keterlambatan yang masih bisa diterima sebelum kami panik). Simpan.
Sekarang modifikasi cron agar mem-ping URL setiap selesai run dengan sukses. Tiga gaya tergantung lingkungan:
# Bash cron - ping hanya jika sukses
0 3 * * * /usr/bin/backup.sh && curl -fsS https://app.diagnoseo.com/tools/uptime-monitoring/hb.php?t=abc123xyz9 > /dev/null
# Atau jika partial success OK
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
Mulai saat ini, setiap cron yang sukses akan mem-ping kami, dan kami akan mencatat timestamp. Jika kami tidak melihat ping selama interval + margin menit, insiden akan dibuka dan notifikasi dikirim ke semua channel yang aktif: Email, Telegram, Slack, Discord, SMS.
Pemilihan Interval dan Margin
Interval sebaiknya sesuai jadwal job. Backup malam jam 3:00—interval 1440 menit (24 jam). Sinkronisasi tiap jam—60. Worker polling tiap 5 menit—5.
Margin menyerap jitter alami. Cron tidak benar-benar berjalan tepat di nanodetik yang sama—mereka mengantri, menunggu job sebelumnya selesai, mundur jika ada error sesaat. Job 24 jam dengan margin 1 jam memberi buffer nyaman tanpa menunda alert. Worker polling 5 menit dengan margin 2 menit mendeteksi kegagalan nyata dengan cepat tanpa false positive akibat lonjakan 30 detik. Kira-kira: atur margin di 10-50% dari interval tergantung seberapa besar job Anda suka "loncat-loncat".
Pola yang Kami Rekomendasikan
- Ping hanya jika sukses. Gunakan
&&di bash—run yang gagal tidak ping. Kami akan mendeteksi tidak ada ping dan memberi alert. - Ping setiap iterasi dalam loop. Untuk worker yang berjalan lama, ping di dalam loop setiap unit kerja yang sukses, bukan di akhir. Ini memastikan worker yang hang dapat dideteksi saat run sedang berlangsung.
- Satu heartbeat per job logis, bukan per skrip. Jika tiga skrip adalah satu pipeline malam, ping sekali di akhir chain. Menjamin sinyal bersih "apakah pipeline hidup".
- Kombinasikan dengan log. Heartbeat memberitahukan job berjalan. Log aplikasi menunjukan apa yang sudah dilakukan. Bersama-sama gambarannya lengkap.
Apa yang Terjadi Jika Heartbeat Menghilang
Insiden akan dibuka begitu deadline terlewati. Dasbor menampilkan monitor merah dengan error "Heartbeat tidak ada selama X menit". Notifikasi terkirim ke semua channel yang Anda aktifkan. Begitu heartbeat baru diterima, monitor otomatis kembali up—akan ditandai up, insiden tertutup, dan (jika recovery alert aktif) Anda dapat notifikasi "back online".
Semuanya diperlakukan sama seperti monitor lain—peta panas, persen uptime, histori, tag, pencarian, ekspor. Dari sisi dasbor, monitor heartbeat hanyalah baris tambahan, bisa diurutkan dan difilter seperti HTTP, ping, port, dan API.
Checklist
Tambah monitor → tipe Heartbeat → salin URL yang dihasilkan → tambahkan ke cron / worker / scheduler → atur interval dan margin → simpan → selesai. Kini Anda akan tahu dalam hitungan detik jika tugas terjadwal Anda berhenti berjalan—yang dalam jangka panjang adalah salah satu keputusan monitoring paling krusial yang bisa Anda ambil.
Pertanyaan yang Sering Diajukan
-
Monitoring terbalik—tugas terjadwal Anda mem-ping URL kami saat berjalan sukses. Jika kami tidak mendengar darinya dalam waktu yang diharapkan, kami mengirim alert. Ini menyelesaikan masalah silent failure: cron job rusak tidak menghasilkan error dan tidak memicu alert uptime tradisional.
-
Tambahkan
curl -fsS <heartbeat_url>di akhir perintah cron Anda. Jika perintah sebelumnya gagal, curl tidak akan berjalan dan heartbeat terlewat. Sebagai alternatif, ping di awal DAN akhir menggunakan endpoint berbeda—ini memberikan sinyal "started" dan "completed" terpisah. -
Sekitar 2-3x waktu eksekusi job Anda. Jika backup harian Anda makan waktu 30 menit, atur grace ke 90 menit—cukup untuk perlambatan tanpa false alert. Untuk job dengan waktu fleksibel, atur lebih longgar dan gunakan dasbor untuk mencari outlier.
-
Bisa—atur interval yang sesuai (misal, 60 menit dengan 15 menit grace). Monitor mengharapkan ping minimal setiap 75 menit. Jika tugas Anda lebih sering (setiap 5 menit), URL heartbeat juga mendukung—tinggal sesuaikan setting intervalnya.
-
Bisa. Tambahkan HTTP request ke URL heartbeat di akhir fungsi Lambda. Monitor memperlakukan sama persis seperti cron heartbeat—alert dan grace period sama. Berguna untuk Lambda terjadwal di mana alarm CloudWatch tidak menangkap kegagalan eksekusi yang silent.
UptimeRobot · Pingdom · BetterStack · Oh Dear · Site24x7 · StatusCake · Sentry · Uptrends · Cronitor · New Relic
Pemantauan SSL · Kedaluwarsa domain · Pemantauan DNS · Ping (ICMP) · Port (TCP) · Endpoint · Kata kunci · API · Waktu respons · Backlink · Khusus lokasi · Pemantauan situs web