Parser Ekspresi Cron

Ekspresi cron mendefinisikan jadwal untuk tugas berulang di sistem mirip Unix. Alat ini mengurai sintaks cron (5-7 field), menjelaskan setiap field dalam bahasa yang mudah dipahami, menghitung waktu eksekusi terjadwal berikutnya, dan memperingatkan tentang kesalahan umum. Mendukung format crontab pengguna dan format crontab sistem dengan field pengguna dan perintah.

Spesifikasi

Kasus Penggunaan Umum

  • Debug mengapa cron job tidak berjalan pada waktu yang diharapkan
  • Memahami ekspresi cron yang diwariskan dalam konfigurasi
  • Merencanakan jadwal backup dan pemeliharaan
  • Memverifikasi jadwal pipeline CI/CD (GitHub Actions, GitLab CI)
  • Menguji jadwal Kubernetes CronJob sebelum deployment
  • Menganalisis entri crontab sistem dari /etc/crontab atau /etc/cron.d/

Fitur

  • Mengurai ekspresi cron 5-field (standar), 6-field (dengan detik), dan 7-field (dengan detik dan tahun)
  • Mendukung format crontab sistem dengan field pengguna (contoh: "0 5 * * * root /path/to/script")
  • Mengekstrak dan menampilkan perintah dari baris cron
  • Menjelaskan setiap field dalam bahasa yang mudah dibaca
  • Menghitung 10 waktu eksekusi terjadwal berikutnya
  • Dukungan untuk rentang (1-5), daftar (1,3,5), langkah (*/15), dan nama (MON, JAN)
  • Memperingatkan tentang masalah umum seperti menentukan hari 31 dalam jadwal

Contoh

Setiap Hari Kerja Pukul 9 Pagi

Coba →

Berjalan pukul 9:00 pagi Senin sampai Jumat.

0 9 * * 1-5

Setiap 15 Menit

Coba →

Berjalan pada menit 0, 15, 30, dan 45 setiap jam.

*/15 * * * *

Crontab Sistem dengan Pengguna dan Perintah

Coba →

Backup harian pukul 5 pagi berjalan sebagai pengguna root (format crontab sistem dari /etc/crontab).

0 5 * * * root /usr/bin/backup.sh

Cron dengan Perintah (Crontab Pengguna)

Coba →

Pemeriksaan kesehatan setiap 5 menit (format crontab pengguna).

*/5 * * * * curl -s http://localhost/health

Bulanan pada Tanggal Pertama

Coba →

Berjalan pada tengah malam hari pertama setiap bulan.

0 0 1 * *

Tips

  • Lima field adalah: menit (0-59), jam (0-23), hari dalam bulan (1-31), bulan (1-12), hari dalam minggu (0-6, Minggu=0).
  • Crontab sistem (/etc/crontab, /etc/cron.d/*) memiliki field ke-6 untuk nama pengguna sebelum perintah.
  • Crontab pengguna (crontab -e) tidak memiliki field nama pengguna; dijalankan sebagai pemilik crontab.
  • Gunakan * untuk "setiap" dan */n untuk "setiap ke-n".
  • Nama hari (SUN-SAT) dan nama bulan (JAN-DEC) tidak peka huruf besar/kecil.
  • Hati-hati menggunakan hari-dalam-bulan dan hari-dalam-minggu bersamaan; perilaku bervariasi antar implementasi.

Pemahaman Parser Ekspresi Cron

Cron adalah penjadwal tugas berbasis waktu dalam sistem operasi mirip Unix, dan ekspresi cron adalah sintaks ringkas untuk mendefinisikan kapan suatu tugas berjalan. Format standar lima field menentukan menit (0-59), jam (0-23), hari dalam bulan (1-31), bulan (1-12), dan hari dalam minggu (0-6, di mana 0 adalah Minggu). Tanda bintang (*) cocok dengan semua nilai, menjadikan "* * * * *" berjalan setiap menit.

Selain nilai sederhana, cron mendukung beberapa operator. Rentang (1-5) mencocokkan jangkauan berurutan. Daftar (1,3,5) mencocokkan nilai diskrit. Nilai langkah (*/15) membuat interval reguler. Ini dapat dikombinasikan: 1-5/2 di hari-dalam-minggu berarti Senin, Rabu, Jumat. Field bulan dan hari-dalam-minggu menerima nama tiga huruf (JAN-DEC, SUN-SAT).

Implementasi cron bervariasi. Crontab pengguna memiliki lima field ditambah perintah. Crontab sistem menambahkan field nama pengguna. Beberapa implementasi mendukung field keenam untuk detik (Spring, Quartz, Kubernetes) dan ketujuh untuk tahun. AWS EventBridge, GitHub Actions, dan penjadwal cloud lainnya masing-masing memiliki variasi mereka sendiri.

Jebakan umum termasuk interaksi antara field hari-dalam-bulan dan hari-dalam-minggu: jika keduanya ditentukan (bukan *), tugas berjalan ketika salah satu kondisi benar (logika OR). Penanganan zona waktu adalah masalah lain — cron job berjalan di zona waktu sistem kecuali CRON_TZ diatur, dan transisi waktu musim panas dapat menyebabkan tugas terlewat atau berjalan dua kali.

Operator / membuat nilai langkah. */5 di field menit berarti "setiap menit ke-5" dan menghasilkan eksekusi pada menit 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, dan 55 setiap jam. Rentang dapat dikombinasikan dengan langkah: 10-30/5 berarti setiap 5 menit antara menit 10 dan menit 30. Untuk menjalankan tugas pada waktu tertentu pada hari tertentu, atur field menit dan jam ke waktu yang diinginkan dan field hari-dalam-minggu ke hari target. Misalnya, "30 14 * * 1-5" berjalan pukul 14:30 Senin sampai Jumat, dan "0 9 * * 0" berjalan pukul 9 pagi setiap hari Minggu. Semua waktu diinterpretasikan dalam zona waktu lokal server kecuali CRON_TZ dikonfigurasi secara eksplisit.

Cron menggunakan waktu jam dinding, yang berarti transisi waktu musim panas dapat menyebabkan perilaku yang tidak terduga. Ketika jam dimajukan, tugas yang dijadwalkan antara pukul 2:00 dan 2:59 pagi mungkin terlewat sepenuhnya. Ketika jam dimundurkan, tugas di jendela waktu tersebut mungkin berjalan dua kali. Untuk tugas kritis, mengatur CRON_TZ=UTC menghindari masalah ini. Sebagai alternatif, hindari menjadwalkan tugas selama jendela transisi, atau rancang tugas agar idempoten sehingga eksekusi ganda tidak berbahaya.

Sintaks cron telah diadopsi jauh melampaui sistem Unix. Kubernetes CronJobs, GitHub Actions, GitLab CI, AWS EventBridge, Google Cloud Scheduler, Spring @Scheduled, dan banyak library antrian tugas semuanya menggunakan ekspresi cron untuk penjadwalan. Namun, setiap implementasi mungkin mendukung fitur yang berbeda — beberapa menambahkan field detik, beberapa menambahkan field tahun, dan beberapa menggunakan ? untuk berarti "tanpa nilai spesifik" di field hari-dalam-bulan atau hari-dalam-minggu.

← Kembali ke semua alat