Cron Expression Parser
Urai cron expression menjadi deskripsi yang mudah dibaca dan pratinjau waktu eksekusi berikutnya
Cron expression
minute hour day(month) month day(week)
Deskripsi yang mudah dibaca
At 9:00 AM, Mon, Tue, Wed, Thu, Fri
Rincian field
Minute
0
0โ59
Hour
9
0โ23
Day (month)
*
1โ31
Month
*
1โ12
Day (week)
1-5
0โ6
10 jadwal eksekusi berikutnya
Apa Itu Penguraian Cron Expression?
Cron expression adalah string yang terdiri dari lima field yang dipisahkan spasi untuk mendefinisikan jadwal berulang. Format ini berasal dari daemon cron Unix, yang pertama kali ditulis oleh Ken Thompson untuk Version 7 Unix pada tahun 1979. Setiap field mewakili satuan waktu: menit, jam, hari dalam sebulan, bulan, dan hari dalam seminggu. Mengurai cron expression berarti mengonversi notasi ringkas ini menjadi deskripsi yang mudah dibaca dan daftar konkret waktu eksekusi mendatang.
Format lima field standar digunakan oleh crontab di Linux dan macOS, oleh platform CI/CD seperti GitHub Actions dan GitLab CI, oleh cloud scheduler di AWS (EventBridge), Google Cloud Scheduler, dan Azure Functions, serta oleh pustaka penjadwalan job di setiap bahasa pemrograman utama. Beberapa sistem memperluas format menjadi enam atau tujuh field dengan menambahkan field detik atau field tahun, tetapi tata letak lima field yang didefinisikan oleh POSIX tetap menjadi dasar yang digunakan oleh semua implementasi.
Mengurai cron expression secara manual rentan terhadap kesalahan. Interaksi antar field menghasilkan jadwal yang tidak langsung terlihat jelas: 0 9 1-7 * 1 tidak berarti 'setiap Senin di minggu pertama' melainkan 'tanggal 1 hingga 7 setiap bulan ATAU setiap Senin.' Cron parser menghilangkan ambiguitas ini dengan memperluas setiap field, menerapkan aturan kombinasi, dan menghasilkan timestamp aktual kapan job akan dijalankan.
Mengapa Menggunakan Cron Parser Ini?
Membaca cron expression seperti 30 */6 1,15 * * dari file konfigurasi dan mengetahui kapan tepatnya ia berjalan memerlukan perhitungan mental di lima field sekaligus. Parser ini melakukan pekerjaan tersebut secara instan.
Kasus Penggunaan Cron Parser
Referensi Sintaks Cron Expression
Cron expression standar memiliki lima field yang dipisahkan spasi. Setiap field menerima bilangan bulat, wildcard, range, daftar, dan nilai step. Tabel di bawah ini menunjukkan rentang yang diizinkan dan operator untuk setiap field.
| Field | Rentang | Operator | Deskripsi |
|---|---|---|---|
| Minute | 0โ59 | * , - / | Minute within the hour |
| Hour | 0โ23 | * , - / | Hour of the day (24-hour) |
| Day (month) | 1โ31 | * , - / | Day of the month |
| Month | 1โ12 | * , - / | Month of the year (or JANโDEC) |
| Day (week) | 0โ6 | * , - / | Day of the week (0 = Sunday, or SUNโSAT) |
Empat karakter khusus mengontrol cara nilai dicocokkan dalam setiap field:
| Karakter | Nama | Perilaku |
|---|---|---|
| * | Wildcard | Matches every possible value in the field. * in the minute field means "every minute." |
| , | List | Separates individual values. 1,15 in the day field means "the 1st and 15th." |
| - | Range | Defines an inclusive range. 1-5 in the day-of-week field means "Monday through Friday." |
| / | Step | Defines an interval. */10 in the minute field means "every 10 minutes." 5/15 means "5, 20, 35, 50." |
Berikut adalah cron expression umum yang mencakup sebagian besar kebutuhan penjadwalan:
| Expression | Jadwal |
|---|---|
| * * * * * | Every minute |
| 0 * * * * | Every hour (at minute 0) |
| */15 * * * * | Every 15 minutes |
| 0 9 * * * | Every day at 9:00 AM |
| 0 9 * * 1-5 | Weekdays at 9:00 AM |
| 30 2 * * 0 | Every Sunday at 2:30 AM |
| 0 0 1 * * | First day of every month at midnight |
| 0 0 * * 1 | Every Monday at midnight |
| 0 0 1 1 * | January 1st at midnight (yearly) |
| 0 */6 * * * | Every 6 hours |
| 5,35 * * * * | At minute 5 and 35 of every hour |
| 0 9-17 * * 1-5 | Every hour from 9 AM to 5 PM, weekdays |
Contoh Kode
Cara mengurai cron expression dan menghitung waktu eksekusi berikutnya dalam bahasa pemrograman populer:
import cronstrue from 'cronstrue';
// Parse cron to human-readable text
cronstrue.toString('0 9 * * 1-5');
// โ "At 09:00 AM, Monday through Friday"
cronstrue.toString('*/15 * * * *');
// โ "Every 15 minutes"
// Validate with cron-parser and get next run times
import { parseExpression } from 'cron-parser';
const interval = parseExpression('30 2 * * 0');
console.log(interval.next().toISOString());
// โ next Sunday at 02:30 UTC
// Iterate over the next 5 runs
for (let i = 0; i < 5; i++) {
console.log(interval.next().toString());
}from crontab import CronTab
from croniter import croniter
from datetime import datetime
# Parse and describe a cron expression
cron = CronTab('0 9 * * 1-5')
print(cron.next(default_utc=True))
# โ seconds until next run
# Get the next 5 run times with croniter
base = datetime.now()
cron_iter = croniter('0 9 * * 1-5', base)
for _ in range(5):
print(cron_iter.get_next(datetime))
# โ next 5 weekday 09:00 timestamps
# Check if a specific time matches
print(croniter.match('*/15 * * * *', datetime(2026, 3, 25, 10, 30)))
# โ True (minute 30 is divisible by 15)package main
import (
"fmt"
"time"
"github.com/robfig/cron/v3"
)
func main() {
// Parse a standard 5-field cron expression
parser := cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow)
schedule, err := parser.Parse("0 9 * * 1-5")
if err != nil {
panic(err)
}
// Calculate the next 5 run times
now := time.Now()
for i := 0; i < 5; i++ {
now = schedule.Next(now)
fmt.Println(now)
}
// โ next 5 weekday 09:00 timestamps
}# List current user's cron jobs crontab -l # Edit cron jobs interactively crontab -e # Add a job: run backup.sh every day at 2:30 AM # (append to crontab via pipe) (crontab -l 2>/dev/null; echo "30 2 * * * /home/user/backup.sh") | crontab - # Check syntax with a dry-run parse (requires cronie or busybox) # The system will reject invalid expressions when saving # View cron logs on systemd-based Linux journalctl -u cron --since "1 hour ago"