Ekspresi Cron Diungkap: Jadwalkan Apa Saja
Anda perlu menjalankan backup database setiap malam pukul 3 pagi. Atau mengirim laporan setiap Senin pagi. Atau membersihkan cache setiap 15 menit. Di server Linux dan Unix, alat untuk ini adalah cron, dan cara Anda memberi tahu cron kapan harus menjalankan sesuatu adalah dengan ekspresi cron.
Ekspresi cron terlihat mengintimidasi pada pandangan pertama. 0 3 * * * atau */15 9-17 * * 1-5 bisa terlihat seperti omong kosong jika Anda tidak mengenal polanya. Tetapi sintaksnya sangat sederhana begitu Anda memahami kelima fieldnya.
Lima Field
Setiap ekspresi cron standar memiliki tepat lima field, dipisahkan oleh spasi. Setiap field mewakili satuan waktu:
┌───────────── menit (0-59)
│ ┌───────────── jam (0-23)
│ │ ┌───────────── hari dalam sebulan (1-31)
│ │ │ ┌───────────── bulan (1-12)
│ │ │ │ ┌───────────── hari dalam seminggu (0-7, di mana 0 dan 7 adalah Minggu)
│ │ │ │ │
* * * * *
Itu saja. Lima field, dari kiri ke kanan: menit, jam, hari dalam sebulan, bulan, hari dalam seminggu.
Tahukah Anda? Nama "cron" berasal dari kata Yunani "chronos," yang berarti waktu. Daemon cron (proses latar belakang) telah menjadi bagian inti dari sistem operasi mirip Unix sejak 1975.
Karakter Khusus
Tanda Bintang (*) — Setiap Nilai
Tanda bintang berarti "setiap nilai yang mungkin" untuk field tersebut.
* * * * * = setiap menit dari setiap jam setiap hari.
Koma (,) — Beberapa Nilai
Koma memisahkan nilai-nilai individual.
0 9,12,18 * * * = pada menit ke-0 jam 9, 12, dan 18 (pukul 09.00, 12.00, 18.00).
Tanda Pisah (-) — Rentang Nilai
Tanda pisah mendefinisikan rentang.
0 9-17 * * * = pada menit ke-0 setiap jam dari jam 9 hingga 17 (pukul 09.00 hingga 17.00, per jam).
Garis Miring (/) — Nilai Langkah
Garis miring mendefinisikan interval.
*/15 * * * * = setiap 15 menit (menit ke-0, 15, 30, 45 setiap jam).
0 */2 * * * = setiap 2 jam pada menit ke-0 (tengah malam, jam 2 pagi, jam 4 pagi, ...).
Membaca Ekspresi Cron: Latihan
Mari kita kerjakan contoh-contoh umum. Untuk setiap contoh, baca lima field dari kiri ke kanan.
0 3 * * * — Setiap Hari Pukul 03.00
| Field | Nilai | Makna |
|---|---|---|
| Menit | 0 | Pada menit ke-0 |
| Jam | 3 | Jam 3 (pukul 03.00) |
| Hari dalam sebulan | * | Setiap hari |
| Bulan | * | Setiap bulan |
| Hari dalam seminggu | * | Setiap hari dalam seminggu |
Terjemahan: "Pukul 03.00 setiap hari." Pilihan klasik untuk backup harian.
*/15 * * * * — Setiap 15 Menit
| Field | Nilai | Makna |
|---|---|---|
| Menit | */15 | Setiap 15 menit |
| Jam | * | Setiap jam |
| Hari dalam sebulan | * | Setiap hari |
| Bulan | * | Setiap bulan |
| Hari dalam seminggu | * | Setiap hari |
Terjemahan: "Setiap 15 menit, sepanjang waktu." Umum untuk pemeriksaan kesehatan dan pembaruan cache.
0 9 * * 1-5 — Hari Kerja Pukul 09.00
| Field | Nilai | Makna |
|---|---|---|
| Menit | 0 | Pada menit ke-0 |
| Jam | 9 | Jam 9 |
| Hari dalam sebulan | * | Setiap hari |
| Bulan | * | Setiap bulan |
| Hari dalam seminggu | 1-5 | Senin hingga Jumat |
Terjemahan: "Pukul 09.00, Senin hingga Jumat." Sempurna untuk laporan kerja harian.
0 0 1 * * — Hari Pertama Setiap Bulan
| Field | Nilai | Makna |
|---|---|---|
| Menit | 0 | Pada menit ke-0 |
| Jam | 0 | Jam 0 (tengah malam) |
| Hari dalam sebulan | 1 | Pada tanggal 1 |
| Bulan | * | Setiap bulan |
| Hari dalam seminggu | * | Hari apa saja dalam seminggu |
Terjemahan: "Pada tengah malam di hari pertama setiap bulan." Digunakan untuk laporan bulanan, penagihan, atau pembersihan.
30 8 * * 1 — Setiap Senin Pukul 08.30
| Field | Nilai | Makna |
|---|---|---|
| Menit | 30 | Pada menit ke-30 |
| Jam | 8 | Jam 8 |
| Hari dalam sebulan | * | Setiap hari |
| Bulan | * | Setiap bulan |
| Hari dalam seminggu | 1 | Senin |
Terjemahan: "Pukul 08.30 setiap Senin." Bagus untuk notifikasi tim mingguan.
Menulis Ekspresi Cron Sendiri
Berikut pendekatan yang sistematis:
- Mulai dengan kapan. "Setiap hari pukul 3 pagi" atau "setiap 5 menit selama jam kerja."
- Isi field dari kiri ke kanan. Mulai dengan menit, lalu jam, lalu hari dalam sebulan, lalu bulan, lalu hari dalam seminggu.
- Gunakan
*untuk "setiap." Jika Anda tidak peduli tentang field tertentu, gunakan*. - Uji sebelum mendeploy. Selalu verifikasi bahwa ekspresi Anda menghasilkan jadwal yang Anda harapkan.
Referensi Cepat Pola Umum
| Jadwal | Ekspresi |
|---|---|
| Setiap menit | * * * * * |
| Setiap 5 menit | */5 * * * * |
| Setiap jam | 0 * * * * |
| Setiap hari tengah malam | 0 0 * * * |
| Setiap hari pukul 03.00 | 0 3 * * * |
| Setiap Senin pukul 09.00 | 0 9 * * 1 |
| Hari kerja pukul 08.30 | 30 8 * * 1-5 |
| Tanggal 1 setiap bulan | 0 0 1 * * |
| Setiap 15 menit, jam kerja | */15 9-17 * * 1-5 |
| Dua kali sehari (jam 9 & 18) | 0 9,18 * * * |
| Setiap Minggu pukul 02.00 | 0 2 * * 0 |
Kesalahan Umum
Lupa bahwa Jam adalah 0-23
Jam 13 adalah pukul 13.00, bukan jam 1. Kesalahan umum adalah menulis 0 1 * * * dengan mengira berjalan pukul 13.00 padahal sebenarnya berjalan pukul 01.00.
Kebingungan Hari dalam Seminggu
Minggu bisa 0 atau 7 (keduanya valid). Senin adalah 1, Sabtu adalah 6. Beberapa orang mengira Senin adalah 0.
Interaksi Hari dalam Sebulan vs. Hari dalam Seminggu
Jika Anda menentukan hari dalam sebulan dan hari dalam seminggu (keduanya bukan *), sebagian besar implementasi cron menjalankan tugas saat salah satu kondisi terpenuhi, bukan saat keduanya terpenuhi. Ini sering mengejutkan banyak orang.
Peringatan Ekspresi 0 9 15 * 1 TIDAK berarti "pukul 09.00 pada tanggal 15, tetapi hanya jika hari Senin." Artinya "pukul 09.00 pada tanggal 15 setiap bulan DAN pukul 09.00 setiap Senin." Ini adalah sumber perilaku tak terduga yang umum.
Kesadaran Zona Waktu
Cron berjalan dalam zona waktu lokal server. Jika server Anda menggunakan UTC dan Anda berada di Jakarta (UTC+7), tugas cron 0 9 * * * berjalan pukul 16.00 waktu Jakarta. Selalu periksa zona waktu server Anda.
Tips Uji dan visualisasikan ekspresi cron sebelum mendeploy: Cara Membaca dan Menguji Ekspresi Cron. Lihat waktu eksekusi berikutnya dan konfirmasikan jadwal sesuai dengan yang Anda inginkan.
Buat dan uji ekspresi cron Anda:
Gratis, instan, dan tidak perlu daftar.