Cronwise

Quartz vs Cron Standar: Perbedaan Utama

Panduan keputusan ringkas untuk memilih dialek cron yang tepat dan menghindari ketidakcocokan parser.

Buka Quartz Explainer

Mengapa Dialek Cron Itu Penting

Sebagian besar kesalahan cron dimulai sebelum deployment, ketika tujuan jadwal dan sintaks berbeda. Jika Anda menulis ekspresi cron untuk parser standar 5-field dan men-deploy-nya di scheduler berbasis Quartz, hasilnya bukan hanya kesalahan sintaks. Field bergeser posisi, token disalahartikan, dan jadwal mungkin berjalan di waktu yang sepenuhnya salah atau gagal secara diam-diam tanpa umpan balik yang berguna.

Kebingungan berasal dari fakta sederhana: tidak ada satu format "cron" tunggal. Crontab Unix asli menggunakan lima field (menit, jam, hari-dalam-bulan, bulan, hari-dalam-minggu). Quartz Scheduler memperluas ini ke enam atau tujuh field dengan menambahkan detik di awal dan tahun opsional di akhir. Keduanya disebut "ekspresi cron," tetapi secara struktural tidak kompatibel. Mencampurnya adalah penyebab nomor satu kegagalan penjadwalan terkait dialek.

Artikel ini menjelaskan perbedaan utama dengan contoh praktis, pemeriksaan validasi, dan langkah selanjutnya yang jelas di Cronwise. Tempelkan ekspresi apa pun ke Quartz Explainer untuk melihat artinya secara instan.

Struktur Field: 5 Field vs 7 Field

Perbedaan paling mendasar antara kedua dialek adalah jumlah field dan posisinya. Cron standar menggunakan tepat lima field:

PosisiFieldNilai yang Diizinkan
1Menit0-59
2Jam0-23
3Hari-dalam-Bulan1-31
4Bulan1-12
5Hari-dalam-Minggu0-7 (0 dan 7 = Minggu)

Cron Quartz menambahkan field detik di awal dan field tahun opsional di akhir:

PosisiFieldNilai yang Diizinkan
1Detik0-59
2Menit0-59
3Jam0-23
4Hari-dalam-Bulan1-31
5Bulan1-12 atau JAN-DEC
6Hari-dalam-Minggu1-7 atau SUN-SAT
7Tahun (opsional)1970-2099

Pergeseran posisi ini adalah sumber error lintas-dialek yang paling umum. Ekspresi standar seperti 0 9 * * MON (setiap Senin pukul 09:00) menjadi 0 0 9 ? * MON * di Quartz. Jika Anda menempelkan versi standar ke parser Quartz, 0 dibaca sebagai detik, 9 sebagai jam, dan * sebagai hari-dalam-bulan, yang menghasilkan jadwal yang sama sekali berbeda.

Token Khusus Quartz: ?, L, W, dan #

Selain field tambahan, Quartz memperkenalkan empat karakter khusus yang tidak ada di cron standar. Token-token ini memungkinkan pola penjadwalan yang tidak mungkin diekspresikan dalam crontab 5-field.

Token ? (tidak ada nilai spesifik) wajib digunakan di salah satu field hari-dalam-bulan atau hari-dalam-minggu. Quartz tidak mengizinkan kedua field menggunakan nilai konkret secara bersamaan. Cron standar tidak memiliki pembatasan seperti itu, sehingga ekspresi standar tertentu perlu direstrukturisasi untuk Quartz.

Token L (terakhir) menargetkan hari terakhir dalam bulan atau hari kerja terakhir yang spesifik. Misalnya, L di hari-dalam-bulan berarti hari terakhir (28-31 tergantung bulan), dan 5L di hari-dalam-minggu berarti Kamis terakhir.

Token W (hari kerja) memilih hari kerja terdekat dari hari-dalam-bulan yang diberikan. 15W berarti hari kerja terdekat dengan tanggal 15. Jika tanggal 15 adalah hari Sabtu, pekerjaan berjalan pada hari Jumat tanggal 14. Ini berguna untuk penjadwalan hari kerja.

Token # (kemunculan ke-n) menargetkan kemunculan hari kerja tertentu dalam sebulan. 6#3 berarti Jumat ketiga. Cron standar tidak menyediakan cara bawaan untuk mengekspresikan pola ini.

Menginterpretasikan Jadwal Nyata: Contoh Berdampingan

Melihat kedua dialek secara paralel membuat perbedaannya menjadi konkret. Berikut kebutuhan penjadwalan umum yang diekspresikan dalam kedua format:

TujuanCron StandarCron QuartzPerbedaan Utama
Setiap hari pada tengah malam0 0 * * *0 0 0 * * ? *Awalan detik; ? di hari-dalam-minggu
Hari kerja pukul 09:3030 9 * * 1-50 30 9 ? * MON-FRI *Awalan detik; ? di hari-dalam-bulan; nama hari
Tanggal 1 setiap bulan pukul 06:000 6 1 * *0 0 6 1 * ? *Awalan detik; ? menggantikan wildcard di hari-dalam-minggu
Setiap 15 menit selama jam kerja*/15 9-17 * * 1-50 0/15 9-17 ? * MON-FRI *Field detik; perbedaan sintaks langkah; ? wajib
Hari terakhir setiap bulan pada tengah hariTidak didukung secara native0 0 12 L * ? *Token L khusus Quartz

Baris terakhir menyoroti kesenjangan kemampuan. Cron standar tidak dapat secara native mengekspresikan "hari terakhir dalam bulan." Quartz menanganinya dengan satu token L. Keunggulan pola ini adalah alasan mengapa banyak platform enterprise mengadopsi dialek Quartz meskipun kompleksitasnya bertambah.

Kasus Khusus dan Jebakan Umum

Perbedaan dialek menciptakan kasus khusus yang halus yang lolos pemeriksaan sintaks dasar tetapi menyebabkan masalah runtime:

Ketidakcocokan penomoran hari-dalam-minggu. Cron standar menggunakan 0-7 di mana baik 0 maupun 7 mewakili Minggu. Quartz menggunakan 1-7 di mana 1 adalah Minggu dan 7 adalah Sabtu. Ekspresi * * * * 5 (Jumat di cron standar) menjadi 0 * * ? * 6 * di Quartz. Mendapatkan ini salah menggeser pekerjaan Anda satu hari.

? yang hilang menyebabkan penolakan. Quartz memerlukan ? di tepat satu dari dua field hari. Menggunakan * di keduanya tidak valid di Quartz, meskipun sepenuhnya valid di cron standar.

Ambiguitas field tahun. Dengan enam token, beberapa parser Quartz memperlakukan yang keenam sebagai hari-dalam-minggu sementara yang lain mem-parsing-nya sebagai tahun. Cronwise mendukung mode parse eksplisit standard5, withSeconds6, dan quartz7 untuk menghilangkan ambiguitas ini.

Pergeseran zona waktu pada migrasi dialek. Mengubah dialek cron sering berarti mengubah platform scheduler, yang mungkin memiliki zona waktu default yang berbeda. Jadwal yang berjalan dengan benar di crontab yang dikonfigurasi UTC mungkin berjalan di waktu yang salah di scheduler Quartz yang menggunakan zona waktu JVM. Untuk lebih lanjut tentang risiko ini, baca Zona Waktu Cron Dijelaskan untuk Tim Global.

Memilih Dialek yang Tepat

Keputusan dialek ditentukan oleh platform Anda, bukan preferensi pribadi. Memilih format yang salah tidak hanya menyebabkan error parse; ini dapat menghasilkan jadwal yang salah secara diam-diam yang terlihat valid tetapi berjalan di waktu yang salah.

Gunakan cron standar 5-field ketika:

  • Scheduler Anda adalah daemon cron Unix/Linux, timer systemd, atau layanan cron cloud yang menerima sintaks 5-field.
  • Anda tidak membutuhkan presisi sub-menit atau token penargetan hari tingkat lanjut.
  • Tim Anda bekerja terutama dalam konteks shell atau DevOps di mana cron standar adalah dialek umum.

Gunakan cron Quartz ketika:

  • Scheduler Anda adalah Quartz Scheduler, Spring Boot, atau framework berbasis JVM lainnya.
  • Anda membutuhkan granularitas tingkat detik atau token seperti L, W, dan # untuk logika hari-terakhir, hari-kerja-terdekat, atau hari-kerja-ke-n.

Jika Anda tidak yakin dialek mana yang diharapkan platform Anda, periksa dokumentasi scheduler untuk jumlah field. Lima field berarti standar. Enam atau tujuh field (dimulai dengan detik) berarti Quartz. Cronwise mengidentifikasi dialek secara otomatis saat Anda menempelkan ekspresi, tetapi mengetahui format yang diharapkan mencegah kebingungan di sumbernya.

Terapkan di Alur Kerja Cronwise

Cronwise menyediakan alat khusus untuk kedua dialek sehingga Anda tidak perlu menebak atau mengonversi secara mental antar format. Berikut alur kerja verifikasi yang direkomendasikan sebelum men-deploy jadwal cron apa pun:

Checklist Verifikasi

PemeriksaanMengapa PentingKriteria Lulus
Konfirmasi dialekParser yang salah menghasilkan hasil yang salahJumlah field sesuai scheduler Anda (5 vs 6/7)
Validasi ekspresiMenangkap error sintaks dan token yang salah tempatTidak ada error atau peringatan di validasi Cronwise
Baca penjelasan bahasa sederhanaMengungkap ketidaksesuaian tujuan sebelum deploymentPenjelasan sesuai dengan tujuan penjadwalan Anda
Tinjau pratinjau waktu eksekusi berikutnyaTimestamp konkret mengekspos kasus khusus10 eksekusi berikutnya jatuh di jendela yang diharapkan
Periksa zona waktuZona waktu scheduler mungkin berbeda dari waktu lokal AndaZona waktu pratinjau sesuai scheduler produksi
Simpan dan dokumentasikanPenggunaan ulang dan jejak audit untuk kolaborasi timEkspresi disimpan dengan catatan deskriptif

Mulai dengan Quartz Explainer untuk menguraikan ekspresi yang sudah ada, atau gunakan Quartz Generator untuk membangun yang baru secara visual. Untuk cron standar, explainer beranda dan generator mengikuti alur kerja yang sama dengan sintaks 5-field.

Ringkasan dan Langkah Selanjutnya

Perbedaan inti antara Quartz dan cron standar bermuara pada tiga area: jumlah field (5 vs 6/7), token khusus (?, L, W, #), dan penomoran hari-dalam-minggu (0-7 vs 1-7). Setiap perbedaan lainnya mengalir dari perbedaan struktural ini. Mengetahui dialek mana yang diharapkan scheduler Anda dan memvalidasi terhadap parser yang benar menghilangkan kelas kesalahan penjadwalan yang paling umum.

Sebelum men-deploy jadwal apa pun, jalankan checklist verifikasi di atas. Konfirmasi dialek, validasi ekspresi, baca penjelasan bahasa sederhana, tinjau timestamp waktu eksekusi berikutnya di zona waktu produksi Anda, dan simpan hasilnya dengan catatan deskriptif untuk tim Anda.

Untuk eksplorasi lebih mendalam, baca panduan kami tentang Karakter Khusus Quartz untuk menguasai sintaks L, W, dan #. Jika perilaku zona waktu menjadi perhatian, Zona Waktu Cron Dijelaskan untuk Tim Global membahas offset UTC, kasus khusus DST, dan strategi penjadwalan yang sadar zona waktu. Jelajahi semua artikel cron untuk terus belajar.