Pengurai Ekspresi Cron

Lima field yang dipisahkan spasi, atau singkatan seperti @daily.

Anda mewarisi crontab yang penuh baris seperti 0 */2 * * 1-5 dan 30 3 * JAN,JUL 1. Pengurai ini menguraikan tiap field menjadi nilai persis yang dicocokkannya, jadi alih-alih menebak apa saja yang dicakup */2, Anda langsung melihat dua belas jam yang dipilihnya beserta jumlahnya. Anda juga mendapat bentuk 5 field yang sudah dinormalkan, peringatan ketika ekspresinya termasuk jebakan yang sudah dikenal, dan 5 waktu eksekusi berikutnya yang dihitung dalam zona waktu Anda sendiri.

Cara mengurai ekspresi cron

  1. 1

    Tempel ekspresinya

    Satu baris 5 field (`* * * * *`): menit, jam, hari dalam bulan, bulan, dan hari dalam minggu. Singkatan seperti `@daily` juga bisa.

  2. 2

    Baca uraian tiap field

    Tiap field ditampilkan beserta nilai yang dicocokkannya dan berapa jumlahnya, jadi `*/2` di field jam memperlihatkan 0, 2, 4, dan sembilan nilai lain yang tercakup.

  3. 3

    Periksa pratinjau eksekusi berikutnya

    5 waktu eksekusi mendatang, dihitung di browser Anda berdasarkan zona waktu Anda sendiri. Kalau tidak sesuai maksud Anda, perbaiki ekspresinya.

  4. 4

    Baca peringatannya

    Pengurai menandai jebakannya: dua field hari sama-sama diisi, tanggal yang tidak mungkin ada, atau operator yang tidak dimengerti cron standar.

Uraian setiap field

Sebuah field bukan satu nilai, melainkan satu himpunan nilai. Mengetahui seberapa besar himpunan itu biasanya sudah menjawab pertanyaan yang membawa Anda ke sini.

Field Rentang Cakupan * Catatan
Menit 0-59 60 nilai Sumber paling umum tugas yang berjalan tak terkendali
Jam 0-23 24 nilai Format 24 jam, bukan 1-12
Hari dalam bulan 1-31 31 nilai Bulan yang pendek melewati begitu saja tanggal yang tidak ada
Bulan 1-12 12 nilai JAN sampai DEC juga diterima
Hari dalam minggu 0-7 7 nilai 0 dan 7 sama-sama hari Minggu

Operator di dalam satu field: * semua nilai, 1,5,10 sebuah daftar, 1-5 sebuah rentang, */15 sebuah langkah yang dihitung dari awal rentang, dan 0-45/15 sebuah langkah di dalam rentang.

Nama dan singkatan juga diterima

Nama bulan dan nama hari dalam minggu bisa dibaca, lalu diuraikan menjadi angka yang dicocokkannya, jadi 30 3 * JAN,JUL 1 melaporkan bulan 1, 7 dan hari dalam minggu 1. Singkatan bernama diuraikan lebih dulu ke bentuk 5 field-nya sebelum hal lain diproses:

Singkatan Diuraikan menjadi Artinya
@yearly, @annually 0 0 1 1 * Tengah malam pada 1 Januari
@monthly 0 0 1 * * Tengah malam pada tanggal 1
@weekly 0 0 * * 0 Tengah malam pada hari Minggu
@daily, @midnight 0 0 * * * Tengah malam setiap hari
@hourly 0 * * * * Pada awal setiap jam

@reboot juga dikenali, tetapi tidak ada jadwal yang bisa diuraikan: ia berjalan sekali saat mesin dinyalakan, jadi tidak ada waktu eksekusi yang bisa dipratinjau.

Peringatan yang perlu dibaca

  • Dua field hari sama-sama dibatasi. 0 0 1 * MON bukan berarti “tanggal 1, tetapi hanya kalau tanggal itu jatuh pada hari Senin”. Cron standar memperlakukan dua field hari itu sebagai OR ketika keduanya dibatasi, jadi baris tersebut berjalan setiap tanggal 1 dan setiap hari Senin. Pengurai memunculkan peringatan ini, dan pratinjau waktu eksekusinya mengikuti aturan OR yang sama.
  • Tanggal yang tidak pernah ada. 0 0 30 2 * meminta tanggal 30 Februari. Ekspresinya sah secara sintaksis dan cron akan menerimanya, tetapi tugasnya tidak akan pernah berjalan. Pengurai menyatakannya terus terang, alih-alih menampilkan daftar kosong tanpa penjelasan.
  • Operator Quartz. L (terakhir), W (hari kerja terdekat), # (hari dalam minggu ke-n) dan ? adalah ekstensi Quartz, bukan crontab standar. Di dalam baris 5 field, operator-operator itu dikenali dan ditandai, lalu field yang bersangkutan menunjukkan bahwa isinya operator Quartz, bukan daftar nilai. Waktu eksekusi tidak dihitung, karena cron standar memang tidak akan menjalankan baris itu sama sekali.

Apa yang langsung ditolak

  • Jumlah field yang salah. Baris Quartz 6 field yang memakai detik, atau baris 7 field yang memakai tahun, ditolak karena jumlah field-nya.
  • Nilai di luar rentang, misalnya menit 75 atau bulan 13.
  • Rentang menurun seperti 5-1.
  • Langkah nol, seperti */0.

Setiap penolakan menyebutkan field dan nilai yang menyebabkannya, jadi Anda cukup memperbaiki satu hal, bukan menulis ulang seluruh baris.

Zona waktu

Pratinjau eksekusi berikutnya dihitung di browser Anda, dalam zona waktu yang disetel pada perangkat Anda (WIB adalah UTC+7, WITA UTC+8, dan WIT UTC+9). Sebuah crontab berjalan mengikuti zona waktu mesin yang menjalankannya, jadi kalau server itu memakai UTC sementara perangkat Anda tidak, geser dulu waktunya sebelum membandingkan.

Pertanyaan yang Sering Diajukan

Tidak sebagai jadwal. Baris Quartz 6 field yang memakai detik, atau baris 7 field yang memakai tahun, ditolak karena jumlah field-nya. Operator Quartz di dalam baris 5 field biasa (L, W, #, ?) adalah kasus yang berbeda: operator itu dikenali dan ditandai, tetapi waktu eksekusi tidak dihitung, karena cron standar pun tidak akan menjalankan baris tersebut.

Penyebab yang biasa adalah selisih zona waktu antara perangkat Anda dan server yang menjalankan crontab, atau dua field hari yang sama-sama diisi. Ketika hari dalam bulan dan hari dalam minggu sama-sama dibatasi, cron berjalan saat salah satu cocok, bukan keduanya sekaligus, sehingga 0 0 1 * MON berjalan jauh lebih sering daripada dugaan kebanyakan orang. Jumlah nilai di samping tiap field adalah cara tercepat menemukan field yang ternyata lebih luas daripada yang Anda kira.

Bisa. Kubernetes memakai sintaks standar 5 field. Satu hal yang perlu disesuaikan adalah jamnya: sebuah CronJob berjalan mengikuti zona waktu cluster (UTC kecuali spec.timeZone menentukan lain), sedangkan pratinjau di sini memakai zona waktu perangkat Anda sendiri.

Keduanya singkatan bernama yang diterima cron Linux sebagai pengganti lima field. @daily (juga @midnight) sama dengan 0 0 * * *, @weekly sama dengan 0 0 * * 0, @monthly sama dengan 0 0 1 * *, @yearly (juga @annually) sama dengan 0 0 1 1 *, dan @hourly sama dengan 0 * * * *. Tempel salah satunya dan pengurai akan menunjukkan bentuk 5 field hasil uraiannya. @reboot adalah pengecualian: ia berjalan sekali saat mesin dinyalakan, jadi tidak punya jadwal dan tidak punya waktu eksekusi.

Alat Terkait

Alat ini tersedia dalam bahasa lain