Validator Ekspresi Cron

Validasi ekspresi cron dan tampilkan rincian bidang demi bidang yang terperinci

Coba contoh

Ekspresi cron

minute hour day(month) month day(week)

Ekspresi cron valid

Rincian bidang

Minute*/15(0โ€“59)

Berkembang menjadi: 0, 15, 30, 45

Hour0-6(0โ€“23)

Berkembang menjadi: 0, 1, 2, 3, 4, 5, 6

Day of month1,15(1โ€“31)

Berkembang menjadi: 1, 15

Month*(1โ€“12)

Berkembang menjadi: all (1โ€“12)

Day of week1-5(0โ€“6)

Berkembang menjadi: 1, 2, 3, 4, 5

Apa Itu Validasi Cron Expression?

Validasi cron expression adalah proses pemeriksaan apakah sebuah string cron mengikuti aturan sintaks yang benar sebelum diserahkan ke scheduler. Cron expression menggunakan lima field yang dipisahkan spasi (menit, jam, hari-dalam-bulan, bulan, hari-dalam-minggu) untuk mendefinisikan jadwal berulang. Jika ada field yang mengandung nilai di luar rentang yang diizinkan, operator yang tidak valid, atau kesalahan struktural seperti jumlah field yang salah, expression tersebut akan ditolak oleh scheduler pada waktu deployment atau gagal secara diam-diam tanpa pernah memicu eksekusi.

Memvalidasi cron expression secara online mendeteksi kesalahan lebih awal daripada melakukan deployment ke produksi dan menunggu job yang terlewat. Kesalahan umum mencakup menulis 25 di field jam (rentang valid: 0-23), menggunakan nilai step nol (*/0, yang tidak terdefinisi), membalikkan batas rentang (5-1 alih-alih 1-5), atau menambahkan field tambahan yang termasuk format non-standar seperti Quartz. Pemeriksa sintaks menandai masalah-masalah ini seketika dan memberi tahu Anda field mana yang salah.

Validasi cron berbeda dari penguraian cron. Parser mengambil expression yang valid dan menerjemahkannya menjadi jadwal yang mudah dibaca. Validator menjawab pertanyaan yang lebih sederhana: apakah expression ini terbentuk dengan benar? Validasi dilakukan sebelum parsing โ€” tidak ada gunanya memberikan expression yang tidak valid ke scheduler. Dalam pipeline CI/CD, validasi cron otomatis mencegah jadwal yang rusak digabungkan ke dalam file konfigurasi.

Mengapa Menggunakan Cron Validator Ini?

Cron expression memiliki aturan sintaks yang ketat, dan scheduler memberikan pesan kesalahan yang tidak konsisten ketika aturan tersebut dilanggar. Beberapa scheduler menolak expression dengan pesan kesalahan yang tidak jelas; yang lain menerimanya secara diam-diam dan tidak pernah dieksekusi. Validator ini memberikan diagnosis yang jelas, field per field, sebelum Anda melakukan deployment.

โšก
Pemeriksaan Sintaks Instan
Tempel atau ketik cron expression dan lihat apakah ia lolos validasi secara langsung. Tidak ada pengiriman form, tidak ada penundaan. Hasilnya diperbarui saat Anda mengetik.
๐Ÿ”’
Pemrosesan Mengutamakan Privasi
Validasi berjalan sepenuhnya di browser Anda. Cron expression dan konfigurasi jadwal Anda tidak pernah dikirim ke server maupun disimpan di mana pun.
๐Ÿ”
Laporan Kesalahan Field per Field
Ketika expression tidak valid, validator mengidentifikasi field mana yang menyebabkan kesalahan dan alasannya. Tidak perlu menebak field mana dari lima field yang bermasalah.
๐Ÿ“‹
Tanpa Akun
Buka halaman dan mulai memeriksa. Tidak perlu login, API key, maupun instalasi. Bekerja di perangkat apa pun dengan browser modern, termasuk perangkat seluler.

Kasus Penggunaan Cron Validator

Frontend Developer
Validasi cron expression yang dimasukkan pengguna di antarmuka penjadwalan sebelum menyimpannya ke basis data. Tangkap kesalahan sintaks di sisi klien daripada menunggu penolakan dari backend.
Backend Engineer
Periksa cron expression dalam konfigurasi antrean tugas (Celery beat, Hangfire, Quartz) selama code review. Verifikasi bahwa string jadwal yang telah direfaktor masih lolos validasi sintaks.
DevOps / SRE
Validasi jadwal cron dalam manifest Kubernetes CronJob dan konfigurasi pipeline CI/CD sebelum menerapkannya. Cegah kesalahan ketik dalam jadwal backup agar tidak luput dari perhatian sampai backup terlewat.
QA Engineer
Uji bahwa aplikasi Anda menolak input cron yang tidak valid dengan benar. Buat expression yang diketahui salah (nilai di luar rentang, jumlah field yang salah) dan konfirmasi penanganan kesalahannya berfungsi.
Data Engineer
Validasi pemicu cron untuk Airflow DAG dan jadwal dbt. Konfirmasi bahwa jadwal pipeline yang diurai dari file konfigurasi YAML atau JSON secara sintaksis benar sebelum deployment.
Pelajar / Pemula
Bereksperimen dengan sintaks cron dan dapatkan umpan balik instan tentang apa yang valid dan apa yang salah. Pelajari rentang field, operator, dan kasus tepi dengan menguji expression dan membaca pesan kesalahannya.

Kesalahan Sintaks Cron yang Umum

Tabel di bawah ini mencantumkan kesalahan cron expression yang paling sering terjadi dan penyebabnya. Ini adalah kesalahan yang berulang kali muncul dalam konfigurasi produksi dan pipeline CI/CD.

Jenis kesalahanContohYang salah
Too few fields0 9 * *Missing the day-of-week field. Standard cron requires exactly 5 fields.
Too many fields0 0 9 * * 1 2026Extra fields. Some tools add seconds or year, but standard cron uses 5.
Value out of range0 25 * * *Hour field accepts 0-23. Value 25 exceeds the maximum.
Invalid step base0 0 32/2 * *Day-of-month starts at 32, which exceeds the 1-31 range.
Step of zero*/0 * * * *Step value must be 1 or greater. Zero creates an infinite loop.
Empty field0 9 * * 1Double space creates an empty field. Each field needs a value.
Invalid character0 9 * * Mon-FryTypo in day name. Use three-letter abbreviations: MON, TUE, WED, THU, FRI, SAT, SUN.
Reversed range0 9 * * 5-1Range end (1) is less than start (5). Write 1-5 or use a list: 5,6,0,1.

Cron Expression Valid vs. Tidak Valid

Referensi cepat expression yang terbentuk dengan benar beserta kesalahan umum. Gunakan ini untuk memverifikasi expression Anda sebelum menempelkannya ke konfigurasi scheduler.

Expression valid
* * * * *
0 9 * * 1-5
*/15 * * * *
0 0 1,15 * *
30 2 * * 0
0 */6 * * *
Expression tidak valid
0 9 * *4 field, butuh 5
0 25 * * *jam maksimum adalah 23
*/0 * * * *nilai step tidak boleh 0
0 9 * * 8hari-dalam-minggu maksimum adalah 6
60 * * * *menit maksimum adalah 59
0 0 0 * *hari-dalam-bulan minimum adalah 1

Contoh Kode

Cara memvalidasi cron expression secara programatik dalam JavaScript, Python, Go, dan Bash. Setiap contoh menunjukkan cara menangkap sintaks yang tidak valid dan mengekstrak pesan kesalahan yang bermakna.

JavaScript (Node.js)
import { parseExpression } from 'cron-parser';

// Validate a cron expression by attempting to parse it
function validateCron(expr) {
  try {
    parseExpression(expr);
    return { valid: true, error: null };
  } catch (err) {
    return { valid: false, error: err.message };
  }
}

console.log(validateCron('0 9 * * 1-5'));
// โ†’ { valid: true, error: null }

console.log(validateCron('0 25 * * *'));
// โ†’ { valid: false, error: "Constraint error, got value 25 expected range 0-23" }

// Validate with field-level detail using cron-validator
import { isValidCron } from 'cron-validator';

isValidCron('*/15 * * * *');           // โ†’ true
isValidCron('*/15 * * * *', { seconds: true }); // โ†’ false (expects 6 fields)
isValidCron('0 0 31 2 *');             // โ†’ true (syntactically valid, Feb 31 never fires)
Python
from croniter import croniter

# Validate by checking if croniter can parse the expression
def validate_cron(expr: str) -> dict:
    if croniter.is_valid(expr):
        return {"valid": True, "error": None}
    # Get a more specific error message
    try:
        croniter(expr)
    except (ValueError, KeyError) as e:
        return {"valid": False, "error": str(e)}
    return {"valid": False, "error": "Unknown error"}

print(validate_cron("0 9 * * 1-5"))
# โ†’ {'valid': True, 'error': None}

print(validate_cron("0 25 * * *"))
# โ†’ {'valid': False, 'error': '...out of range...'}

print(validate_cron("* * *"))
# โ†’ {'valid': False, 'error': 'Exactly 5 or 6 columns...'}

# Field-level validation
from crontab import CronTab

cron = CronTab(tab="")
job = cron.new(command="/bin/true")
try:
    job.setall("0 9 * * 1-5")
    print(job.is_valid())  # โ†’ True
except Exception as e:
    print(f"Invalid: {e}")
Go
package main

import (
    "fmt"
    "github.com/robfig/cron/v3"
)

// ValidateCron checks whether a 5-field cron expression is syntactically correct
func ValidateCron(expr string) (bool, error) {
    parser := cron.NewParser(
        cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow,
    )
    _, err := parser.Parse(expr)
    if err != nil {
        return false, err
    }
    return true, nil
}

func main() {
    exprs := []string{
        "0 9 * * 1-5",   // valid
        "0 25 * * *",    // invalid: hour 25
        "*/15 * * * *",  // valid
        "0 0 32 * *",    // invalid: day 32
    }

    for _, e := range exprs {
        ok, err := ValidateCron(e)
        if ok {
            fmt.Printf("%-20s  VALID
", e)
        } else {
            fmt.Printf("%-20s  INVALID: %v
", e, err)
        }
    }
}
Bash
#!/bin/bash

# Validate cron syntax using Python one-liner
validate_cron() {
  python3 -c "
from croniter import croniter
import sys
expr = sys.argv[1]
if croniter.is_valid(expr):
    print(f'VALID: {expr}')
    sys.exit(0)
else:
    print(f'INVALID: {expr}')
    sys.exit(1)
" "$1"
}

validate_cron "0 9 * * 1-5"     # โ†’ VALID: 0 9 * * 1-5
validate_cron "0 25 * * *"      # โ†’ INVALID: 0 25 * * *

# Quick regex pre-check (catches field count and obvious issues)
cron_regex='^([0-9*/,-]+\s+){4}[0-9*/,-]+$'
echo "*/5 * * * *" | grep -Eq "$cron_regex" && echo "passes basic check"
echo "* * *" | grep -Eq "$cron_regex" || echo "fails basic check"

Pertanyaan yang Sering Diajukan

Apa yang membuat cron expression tidak valid?
Cron expression tidak valid ketika melanggar aturan sintaks format lima field. Penyebab umum: jumlah field yang salah (kurang dari 5 atau lebih dari 5 untuk cron standar), nilai di luar rentang yang diizinkan (misalnya, jam 25, menit 60, hari-dalam-bulan 0), nilai step nol (*/0), batas rentang yang terbalik (5-1), atau karakter yang tidak dikenali. Expression harus memiliki tepat lima field yang dipisahkan spasi dengan nilai dan operator yang valid di setiap field.
Apakah cron expression valid jika tidak pernah dieksekusi?
Ya, secara sintaksis. Expression seperti 0 0 31 2 * (31 Februari) lolos validasi sintaks karena setiap field mengandung nilai dalam rentang yang diizinkan. Namun ia tidak pernah terpicu karena Februari tidak pernah memiliki 31 hari. Sebagian besar validator hanya memeriksa sintaks, bukan kebenaran semantik. Jika Anda perlu mendeteksi jadwal yang tidak terjangkau, hitung N waktu eksekusi berikutnya dan periksa apakah daftarnya kosong.
Bagaimana cara memvalidasi cron expression 6-field atau 7-field?
Cron POSIX standar menggunakan 5 field. Quartz Scheduler menambahkan field detik di awal (6 field) dan field tahun opsional di akhir (7 field). AWS EventBridge menggunakan 6 field. Validator ini memeriksa format standar 5-field. Untuk memvalidasi expression Quartz atau EventBridge, gunakan pustaka yang mendukung format yang diperluas, seperti cron-parser dengan opsi extended di Node.js atau quartz-cron di Java.
Bisakah saya menggunakan nama hari dan bulan dalam cron expression?
Sebagian besar implementasi cron menerima singkatan tiga huruf bahasa Inggris untuk bulan (JAN-DEC) dan hari dalam minggu (SUN-SAT). Ini tidak peka huruf besar-kecil di crontab tetapi mungkin peka di sistem lain. Nilai bernama tidak dapat digunakan dalam rentang di semua platform: MON-FRI berfungsi di crontab tetapi tidak di setiap pustaka. Jika portabilitas penting, gunakan nilai numerik (1-5 untuk Senin hingga Jumat).
Mengapa cron expression saya berfungsi di crontab tetapi gagal di Kubernetes?
Kubernetes CronJob menggunakan format 5-field yang sama seperti crontab tetapi diurai oleh pustaka cron Go, yang memiliki validasi lebih ketat. Expression yang ditoleransi crontab (seperti spasi di akhir, atau hari-dalam-bulan dan hari-dalam-minggu yang keduanya diatur ke nilai non-wildcard) mungkin berperilaku berbeda. Kubernetes juga menggunakan zona waktu controller-manager secara default (biasanya UTC), bukan zona waktu lokal node. Selalu validasi expression terhadap scheduler spesifik yang akan Anda gunakan.
Bagaimana cara memvalidasi cron expression dalam pipeline CI/CD?
Tambahkan langkah validasi yang berjalan sebelum deployment. Dalam proyek Node.js, gunakan cron-parser atau cron-validator dalam file pengujian yang membaca string cron dari konfigurasi Anda dan memastikan parsing berjalan tanpa kesalahan. Dalam Python, gunakan croniter.is_valid(). Dalam skrip shell, panggil fungsi validasi dan keluar dengan kode non-nol jika gagal. Ini menangkap kesalahan ketik dan kesalahan salin-tempel sebelum mencapai produksi.
Apa perbedaan antara validasi cron dan linting cron?
Validasi memeriksa apakah expression secara sintaksis benar: jumlah field yang tepat, nilai dalam rentang, operator yang valid. Linting melangkah lebih jauh dengan memeriksa kemungkinan kesalahan yang secara teknis valid: jadwal yang tidak pernah dieksekusi (31 Feb), job yang tumpang tindih, nilai step yang melewatkan interval yang diharapkan (*/7 direset setiap jam), atau jadwal tanpa dokumentasi zona waktu. Validasi menjawab 'apakah ini akan diurai?' Linting menjawab 'apakah ini yang Anda maksudkan?'