Cara Membaca Ekspresi Cron
Ekspresi cron menggambarkan jadwal berulang dalam beberapa kolom yang dipisahkan spasi. Idenya sederhana, tetapi urutan kolom dan karakter khusus berbeda antarsistem. Panduan ini menunjukkan cara membaca format-format yang umum.
Lima Kolom Unix
Cron Unix dan Linux klasik menggunakan lima kolom, dibaca dari kiri ke kanan:
menit jam tanggal bulan hari-dalam-minggu
Jadi 30 9 * * 1-5 berarti "pukul 09:30, Senin sampai Jumat". Menit berkisar dari 0 sampai 59, jam dari 0 sampai 23, tanggal dari 1 sampai 31, dan bulan dari 1 sampai 12. Hari dalam minggu berkisar dari 0 sampai 6, dengan 0 berarti Minggu (banyak implementasi juga menerima 7 untuk Minggu). Sebagian besar versi juga menerima nama seperti JAN atau MON, dan makro seperti @daily atau @hourly.
Format Spring, Quartz, dan AWS
Penjadwal lain menambahkan kolom, dan inilah sumber kebingungan yang paling umum saat menyalin ekspresi dari satu sistem ke sistem lain.
| Format | Kolom | Hari dalam minggu |
|---|---|---|
| Unix / Linux | 5: menit jam tanggal bulan hari | 0–6, Minggu = 0 |
| Spring | 6: detik menit jam tanggal bulan hari | 0–7, Minggu = 0 atau 7 |
| Quartz | 6 atau 7: detik menit jam tanggal bulan hari [tahun] | 1–7, Minggu = 1 |
| AWS EventBridge | 6: menit jam tanggal bulan hari tahun | 1–7, Minggu = 1 |
Angka yang sama dapat berarti hal yang berbeda: 0 0 12 * * ? berarti "setiap hari pukul 12 siang" di Quartz, sedangkan jika dibaca sebagai format 5 kolom, ekspresi itu tidak valid. Nomor hari dalam minggu juga bergeser: di Quartz dan AWS, 2 adalah Senin, tetapi di cron Unix adalah Selasa. Nama hari seperti MON menghindari ambiguitas ini jika didukung.
Karakter Khusus
*semua nilai kolom.,daftar, mis.1,15.-rentang, mis.9-17atauMON-FRI./langkah:*/15di kolom menit berarti setiap 15 menit;5/15dimulai dari 5 (tidak didukung cron Unix klasik, yang memakai rentang seperti5-59/15).?"tanpa nilai tertentu"; Quartz dan AWS mewajibkannya di kolom tanggal atau kolom hari dalam minggu.Lterakhir:Ldi kolom tanggal adalah hari terakhir bulan itu; di Quartz,6Ldi kolom hari dalam minggu adalah Jumat terakhir.Whari kerja terdekat:15Wadalah hari kerja yang paling dekat dengan tanggal 15.#hari ke-n dalam bulan:6#3adalah Jumat ketiga menurut penomoran Quartz dan AWS.
L, W, dan # adalah ekstensi yang tidak didukung cron Unix klasik.
Tanggal vs Hari dalam Minggu
Jika kedua kolom hari dibatasi, sistem-sistem berbeda pendapat tentang cara menggabungkannya. Di cron Unix klasik, tugas berjalan jika salah satu kolom cocok: 0 9 13 * 5 berjalan setiap tanggal 13 dan setiap hari Jumat, bukan hanya pada Jumat tanggal 13. Spring mengharuskan keduanya cocok. Quartz dan AWS menghindari masalah ini dengan mewajibkan ? di salah satu dari kedua kolom.
Pengurai Cron LeedyBox menerapkan aturan format yang Anda pilih dan menjelaskan dalam ringkasannya apakah cukup salah satu atau kedua kolom hari harus cocok.
Zona Waktu dan Waktu Musim Panas (DST)
Ekspresi cron tidak menyertakan zona waktu. Ekspresi dijalankan dalam zona waktu sistem atau layanan yang mengeksekusinya, yang bisa berupa waktu lokal server atau UTC. Tugas yang ditulis untuk pukul 09:00 waktu lokal dapat berjalan pada jam yang berbeda jika server memakai UTC.
Waktu musim panas (daylight saving time) menambah kasus tepi lain. Saat jam dimajukan, waktu seperti 02:30 mungkin tidak ada pada hari itu; saat jam dimundurkan, waktu tersebut dapat terjadi dua kali. Bergantung pada implementasinya, tugas dalam rentang itu dapat terlewat, berjalan terlambat, atau berjalan dua kali. Menjadwalkan tugas penting di luar rentang perubahan, atau dalam UTC, mengurangi kejutan. Pengurai Cron memungkinkan Anda memilih zona waktu dan mencantumkan waktu jalan berikutnya, sehingga Anda dapat memeriksa tanggal di sekitar perubahan.
Pertanyaan Umum
Bagaimana cara menjalankan tugas setiap 5 menit?
Di cron Unix, gunakan */5 * * * *. Di Spring, tambahkan kolom detik di awal: 0 */5 * * * *.
Mengapa ekspresi Quartz saya gagal di crontab Linux?
Ekspresi Quartz diawali kolom detik dan dapat memakai ? atau L, yang tidak diterima crontab. Tulis ulang ekspresi dalam format 5 kolom.
Apakah waktu jalan berikutnya yang ditampilkan pengurai sudah tepat?
Waktu tersebut dihitung di browser Anda untuk format dan zona waktu yang dipilih. Pastikan jadwalnya di sistem yang akan menjalankan tugas, karena implementasinya bisa berbeda.