fixmint
ID

Cara membaca ekspresi cron, field demi field

Oleh · · Dibaca 5 menit

Ekspresi cron adalah baris teks pendek yang memberi tahu penjadwal kapan menjalankan sebuah tugas. Bentuk yang umum memiliki lima field yang dipisahkan spasi: menit, jam, tanggal, bulan dan hari dalam minggu. Baris 0 9 * * 1-5 berarti pukul 09:00 pada hari Senin sampai Jumat. Setiap field berisi angka, nama, daftar, rentang atau langkah, atau * untuk setiap nilai, dan sebuah tugas berjalan pada setiap waktu ketika semua field cocok.

Penjelas cron expressionCron berjalan di waktu yang salahPakai gratis

Lima field

FieldNilai yang diizinkanContoh
Menit0 sampai 5930 adalah menit ke-30 dalam satu jam
Jam0 sampai 239 adalah 09:00, dengan format 24 jam
Tanggal1 sampai 3115 adalah tanggal 15
Bulan1 sampai 12, atau JAN sampai DEC3 atau MAR adalah Maret
Hari dalam minggu0 sampai 6, atau SUN sampai SAT0 atau SUN adalah Minggu, 1 adalah Senin

Beberapa sistem juga menerima 7 untuk Minggu, tetapi tidak semuanya, jadi gunakan 0 atau SUN. Dalam bentuk ini, cron tidak memiliki field detik, sehingga langkah terkecil adalah satu menit.

Daftar, rentang, langkah dan nama

  • berarti setiap nilai dalam field tersebut. * * * * berjalan setiap menit.
  • Daftar memakai koma. 0 9,17 * * * berjalan pukul 09:00 dan pukul 17:00 setiap hari.
  • Rentang memakai tanda hubung. 1-5 pada field hari dalam minggu berarti Senin sampai Jumat.
  • Langkah memakai garis miring. */15 pada field menit berarti 0, 15, 30 dan 45. 10-30/5 berarti 10, 15, 20, 25 dan 30.
  • Nama seperti MON-FRI dapat menggantikan angka. Nama lebih mudah dibaca, jika penjadwal Anda menerimanya.

Bagian-bagian ini dapat dikombinasikan. 0 8-18/2 * * * berjalan pada menit 0 setiap dua jam dari pukul 08:00 sampai 18:00.

Jadwal yang umum

EkspresiArtinya
* * * * *Setiap menit
/15 * * *Setiap 15 menit
0 * * * *Pada menit 0 setiap jam
0 2 * * *Setiap hari pukul 02:00
0 9 * * 1-5Pukul 09:00, Senin sampai Jumat
0 9,17 * * *Pukul 09:00 dan 17:00 setiap hari
30 6 1 * *Pukul 06:30 pada tanggal 1 setiap bulan
0 0 * * 0Tengah malam setiap hari Minggu
0 0 1 1 *Tengah malam pada 1 Januari
/5 9-17 * 1-5Setiap 5 menit dari pukul 09:00 sampai 17:55, Senin sampai Jumat

Perhatikan bahwa 0 0 * * adalah tengah malam, dan 0 12 * * adalah tengah hari. Salah menentukan jam adalah salah satu kesalahan yang paling sering terjadi.

Tanggal dan hari dalam minggu

Ketika field tanggal dan field hari dalam minggu sama-sama dibatasi, tugas berjalan jika salah satu cocok. Ini adalah aturan klasik di Vixie cron dan banyak sistem turunannya. Jadi 0 0 13 * 5 berjalan pada tengah malam tanggal 13 setiap bulan dan juga setiap hari Jumat. Banyak orang mengira hanya Jumat tanggal 13 saja, lalu mendapati tugas berjalan lebih sering dari yang mereka rencanakan.

Jika salah satu dari kedua field itu adalah *, hanya field lainnya yang dihitung. Untuk berjalan pada Jumat tanggal 13, jadwalkan tugas untuk setiap hari Jumat dan periksa tanggalnya di dalam skrip. Penjadwal lain, termasuk beberapa layanan cloud, mungkin memakai aturan yang berbeda, jadi baca dokumentasinya.

Zona waktu dan daylight saving

Cron berjalan menurut jam pada mesin atau layanan tempat ia berjalan, yang biasanya adalah zona waktu lokal mesin tersebut. Tugas yang diatur pukul 02:30 berjalan pada pukul 02:30 menurut jam itu. Periksa zona waktunya terlebih dahulu (di Linux, date menampilkannya). Jika Anda ingin tugas mengikuti satu jam yang sama di mana pun, banyak tim menjalankan server dalam UTC, dan beberapa penjadwal memungkinkan Anda menetapkan zona waktu untuk setiap tugas.

Daylight saving mengubah jam dua kali setahun. Pada musim semi, banyak tempat melompat dari pukul 02:00 langsung ke 03:00, sehingga tugas pada pukul 02:30 tidak punya waktu untuk berjalan. Pada musim gugur, jam dari 01:00 sampai 01:59 terjadi dua kali. Penjadwal menangani kasus ini secara berbeda. Ada yang melewati tugas, ada yang menjalankannya sekali, dan ada yang menjalankannya dua kali. Hindari jendela perubahan waktu pada dini hari, atau gunakan UTC, jika perbedaan ini penting bagi Anda.

Enam field dan Quartz

Beberapa penjadwal menambahkan field detik di awal, sehingga /10 * * * * berjalan setiap 10 detik. Penjadwal Quartz untuk Java menggunakan detik, menit, jam, tanggal, bulan, hari dalam minggu dan tahun opsional, dan menambahkan empat karakter khusus:

  • ? berarti "tidak ada nilai tertentu". Quartz mewajibkannya di salah satu field tanggal atau hari dalam minggu, yaitu field yang tidak Anda atur.
  • L berarti terakhir. L pada field tanggal berarti hari terakhir bulan, dan 6L pada field hari dalam minggu berarti Jumat terakhir.
  • W berarti hari kerja terdekat. 15W adalah hari kerja yang paling dekat dengan tanggal 15, dan tidak akan melompat ke bulan lain.
  • # berarti hari ke-n dalam minggu tertentu. 6#3 adalah Jumat ketiga.

Quartz menomori hari secara berbeda dari bentuk lima field. Angka 1 adalah Minggu dan 7 adalah Sabtu, sehingga Senin sampai Jumat adalah 2-6, bukan 1-5. Selalu periksa format apa yang dipakai penjadwal Anda sebelum menyalin sebuah baris.

Kesalahan yang umum

  • */7 pada field menit. Nilainya adalah 0, 7, 14 dan seterusnya sampai 56. Berikutnya seharusnya 63, yang tidak ada, sehingga eksekusi setelah 56 terjadi pada menit 0 jam berikutnya. Selisihnya hanya empat menit, dan jaraknya tidak merata. Gunakan langkah yang membagi 60 secara merata, seperti 5, 10, 15 atau 30.
  • 30 Februari. Tanggal seperti itu tidak ada, sehingga 0 0 30 2 * tidak pernah berjalan. Hal yang sama berlaku untuk tanggal 31 pada bulan yang hanya memiliki 30 hari. Berdasarkan aturan "salah satu", batasan hari dalam minggu tetap dapat membuat tugas berjalan pada hari lain, jadi periksa hasilnya.
  • Jam 24 atau menit 60. Nilai ini berada di luar rentang. Sebagian besar penjadwal menolaknya saat Anda menyimpan, tetapi tidak semuanya.
  • Mengharapkan detik. Baris lima field hanya berjalan pada menit penuh.
  • Mengacaukan cron dengan ekspresi reguler. Dalam cron, berarti setiap nilai. Dalam ekspresi reguler, berarti mengulang item di depannya. Gunakan penguji regex untuk pola, dan pisahkan baris cron dari keduanya.

Periksa eksekusi berikutnya

Sebelum Anda mengandalkan sebuah jadwal, baca baris tersebut dengan kata-kata biasa, lalu daftarkan beberapa waktu eksekusi berikutnya. Penjelas cron melakukan kedua hal itu, dan itu adalah cara tercepat untuk menangkap aturan "salah satu" atau langkah yang janggal.

Jawaban singkat

Apakah field pertama adalah menit atau detik?

Menit, dalam bentuk lima field yang standar. Hanya beberapa penjadwal enam field yang menambahkan detik, dan mereka menempatkannya di awal.

Mengapa tugas saya berjalan pada hari Jumat dan juga pada tanggal 13?

Field tanggal dan field hari dalam minggu sama-sama diatur, sehingga tugas berjalan jika salah satunya cocok. Atur salah satu field ke * jika Anda hanya ingin field yang lain.

Apakah cron menggunakan UTC?

Hanya jika mesin atau layanannya diatur ke UTC. Jika tidak, cron menggunakan zona waktu lokal sistem tersebut.

Diterjemahkan dari Asli dalam bahasa Inggris dengan bantuan AI.

Komentar

    Belum ada komentar. Jadilah yang pertama.

    Penilaian Anda (opsional)

    Email Anda tidak pernah ditampilkan atau disimpan.

    Sampul Agentic AI in the BrowserAgentic AI in the Browser

    Contoh penggunaan alur kerja AI yang mengutamakan privasi dan berjalan langsung di browser: gagasan 'kerjakan di perangkat Anda' yang sama, yang menjadi dasar fixmint.

    $4.99Beli di GumroadDalam bahasa Inggris