Cara Membaca dan Memahami Ekspresi Cron
Ekspresi cron adalah string dari lima atau enam bidang yang menggambarkan jadwal berulang. Setelah Anda mempelajari polanya, Anda dapat membaca ekspresi cron seperti bahasa Inggris biasa. Panduan ini mengajarkan Anda untuk mendekode setiap elemen sintaks cron, dari * * * * * sederhana hingga ekspresi kompleks dengan rentang, langkah, dan karakter khusus.
Lima Bidang Cron
Setiap ekspresi cron memiliki lima bidang waktu diikuti oleh perintah:
┌───────── Menit (0-59)
│ ┌──────── Jam (0-23)
│ │ ┌─────── Hari dalam Bulan (1-31)
│ │ │ ┌────── Bulan (1-12)
│ │ │ │ ┌───── Hari dalam Minggu (0-7, 0 dan 7 = Minggu)
│ │ │ │ │
* * * * * <perintah>
Membaca dari kiri ke kanan: "Pada menit berapa, pada jam berapa, pada hari apa dalam bulan, pada bulan apa, dan pada hari apa dalam minggu?"
Membaca Ekspresi Langkah demi Langkah
Contoh Sederhana
0 9 * * *
Dibaca sebagai: "Pada menit 0, pada jam 9, setiap hari dalam bulan, setiap bulan, setiap hari dalam minggu." → Berjalan setiap hari jam 9:00 pagi.
*/15 * * * *
Dibaca sebagai: "Setiap 15 menit dari setiap jam, setiap hari." → Berjalan setiap 15 menit.
30 8 * * 1-5
Dibaca sebagai: "Pada menit 30, pada jam 8, setiap hari dalam bulan, setiap bulan, Senin sampai Jumat." → Berjalan hari kerja jam 8:30 pagi.
0 0 1 * *
Dibaca sebagai: "Pada tengah malam pada hari pertama setiap bulan." → Berjalan bulanan.
Contoh Kompleks
0 9-17/2 * * 1-5
Memecahnya:
0— pada menit 09-17/2— setiap 2 jam dari jam 9 hingga 17 (yaitu, 9, 11, 13, 15, 17)*— setiap hari dalam bulan*— setiap bulan1-5— Senin sampai Jumat
→ Berjalan pada jam 9:00, 11:00, 13:00, 15:00, dan 17:00 pada hari kerja.
30 6 1,15 * 0
Memecahnya:
30— pada menit 306— pada jam 61,15— pada hari 1 dan hari 15 dalam bulan*— setiap bulan0— hanya pada hari Minggu
→ Berjalan jam 6:30 pagi pada tanggal 1 dan 15 setiap bulan, hanya jika hari-hari tersebut juga hari Minggu.
Referensi Karakter Khusus
* — Setiap / Semua
Mencocokkan nilai apa pun untuk bidang itu.
0 * * * * → "Setiap jam"
* * * * * → "Setiap menit"
, — Daftar / Atau
Memisahkan beberapa nilai.
0 9,12,15 * * * → "Pada jam 9 pagi, 12 siang, dan 3 sore"
- — Rentang
Mendefinisikan rentang nilai inklusif.
0 9-17 * * * → "Setiap jam dari jam 9 pagi hingga 5 sore"
30 8 * * 1-5 → "Hari kerja jam 8:30 pagi"
/ — Langkah
Membagi bidang menjadi kelipatan.
*/15 * * * * → "Setiap 15 menit"
0 */2 * * * → "Setiap 2 jam"
0 0 */3 * * → "Setiap 3 hari"
Langkah dapat digabungkan dengan rentang:
0 9-17/2 * * * → "Setiap 2 jam dari jam 9 pagi hingga 5 sore"
30 */4 * * 1-5 → "Setiap 4 jam pada hari kerja, pada menit 30"
L — Terakhir (beberapa sistem)
Dalam beberapa implementasi cron (seperti Quartz), L berarti "terakhir."
0 0 L * * → "Hari terakhir setiap bulan"
# — Kemunculan ke-N (beberapa sistem)
0 9 * * 1#1 → "Senin pertama setiap bulan jam 9 pagi"
Ekspresi Umum yang Didekode
| Ekspresi | Dapat Dibaca Manusia | Deskripsi |
|---|---|---|
* * * * * |
Setiap menit | |
*/5 * * * * |
Setiap 5 menit | |
0 * * * * |
Pada menit 0 setiap jam | Setiap jam |
0 */2 * * * |
Setiap 2 jam | |
0 9 * * * |
Setiap hari jam 9 pagi | Harian |
0 9,17 * * * |
Setiap hari jam 9 pagi dan 5 sore | |
0 9 * * 1-5 |
Hari kerja jam 9 pagi | |
30 8 * * 1 |
Senin jam 8:30 pagi | |
0 0 1 * * |
Tanggal 1 setiap bulan | Bulanan |
0 0 1 1 * |
1 Januari tengah malam | Tahunan |
*/15 9-17 * * 1-5 |
Setiap 15 menit selama jam kerja pada hari kerja | |
0 0 * * 0 |
Setiap Minggu tengah malam | Mingguan |
0 0 */2 * * |
Setiap dua hari tengah malam | |
0 22 * * 5 |
Setiap Jumat jam 10 malam |
Cron Enam Bidang (Dengan Detik)
Beberapa implementasi cron (seperti Quartz Scheduler) menggunakan enam bidang, menambahkan detik di awal:
┌───────── Detik (0-59)
│ ┌──────── Menit (0-59)
│ │ ┌─────── Jam (0-23)
│ │ │ ┌────── Hari dalam Bulan (1-31)
│ │ │ │ ┌───── Bulan (1-12)
│ │ │ │ │ ┌──── Hari dalam Minggu (0-7)
│ │ │ │ │ │
* * * * * * <perintah>
0 */5 * * * * → "Setiap 5 menit, pada detik 0"
0 0 9 * * * → "Setiap hari jam 9:00:00 pagi"
Singkatan Non-Standar
Banyak implementasi cron mendukung alias ini:
@yearly → 0 0 1 1 * → "Setahun sekali"
@monthly → 0 0 1 * * → "Sebulan sekali"
@weekly → 0 0 * * 0 → "Seminggu sekali"
@daily → 0 0 * * * → "Sehari sekali"
@hourly → 0 * * * * → "Satu jam sekali"
@reboot → (bukan waktu) → "Berjalan saat startup"
Menerjemahkan Cron ke Bahasa Manusia
Ketika Anda melihat ekspresi cron yang tidak dikenal, dekode bidang demi bidang:
Ekspresi: 45 17 1,15 * 1-5
| Bidang | Nilai | Arti |
|---|---|---|
| Menit | 45 | Pada menit 45 |
| Jam | 17 | Pada jam 5 sore |
| Hari dalam Bulan | 1,15 | Pada tanggal 1 dan 15 |
| Bulan | * | Setiap bulan |
| Hari dalam Minggu | 1-5 | Senin sampai Jumat |
Hasil: "Pada jam 5:45 sore tanggal 1 dan 15 setiap bulan, hanya jika hari-hari tersebut adalah hari kerja."
Ekspresi: 0 0 * * 0
| Bidang | Nilai | Arti |
|---|---|---|
| Menit | 0 | Pada tengah malam |
| Jam | 0 | Pada jam 0 (tengah malam) |
| Hari dalam Bulan | * | Setiap hari |
| Bulan | * | Setiap bulan |
| Hari dalam Minggu | 0 | Minggu |
Hasil: "Setiap Minggu tengah malam."
Kesalahan Umum Saat Membaca Cron
Kesalahan 1: * di hari-dalam-minggu DAN hari-dalam-bulan berarti keduanya cocok
Ketika kedua hari-dalam-bulan dan hari-dalam-minggu adalah *, ekspresi berjalan pada hari apa pun. Tetapi ketika keduanya memiliki nilai spesifik, pekerjaan berjalan jika SALAH SATU cocok — ini adalah kondisi OR.
0 9 15 * 1
Ini berjalan jam 9 pagi pada tanggal 15 setiap bulan DAN pada setiap hari Senin (bukan "tanggal 15 DAN Senin"). Untuk berjalan hanya ketika keduanya cocok, Anda memerlukan dua entri crontab terpisah atau logika tingkat skrip.
Kesalahan 2: Cron menggunakan waktu lokal, bukan UTC
Cron menggunakan waktu lokal sistem. Pada server yang dikonfigurasi ke UTC, 0 9 * * * berjalan jam 9 pagi UTC. Selalu verifikasi zona waktu server sebelum mengatur jadwal.
Kesalahan 3: 0 dan 7 keduanya adalah hari Minggu
Dalam bidang hari-dalam-minggu, baik 0 maupun 7 mewakili hari Minggu. Ini adalah warisan dari implementasi Unix awal.
Alat Online
Alat Cron Expression Parser di Help2Code mendekode ekspresi cron apa pun menjadi deskripsi yang dapat dibaca manusia. Tempelkan ekspresi seperti */15 9-17 * * 1-5 dan lihat rincian bidang demi bidang, waktu eksekusi berikutnya, dan penjelasan bahasa Inggris. Buat ekspresi baru dengan alat Cron Job Command Generator.
Kesimpulan
Membaca ekspresi cron adalah keterampilan yang menjadi kebiasaan dengan latihan. Ingat lima bidang: menit, jam, hari-dalam-bulan, bulan, hari-dalam-minggu. Gunakan wildcard * untuk "setiap," rentang dengan - untuk rentang, langkah dengan / untuk interval, dan daftar dengan , untuk nilai spesifik. Dekode ekspresi yang tidak dikenal bidang demi bidang, dan gunakan alat Cron Expression Parser untuk memverifikasi pemahaman Anda.