Utilia

Generator Ekspresi Cron

Susun ekspresi cron per kolom, baca artinya dalam kata-kata, lihat jadwal berikutnya di zona waktu apa pun, dan konversi ke systemd, Quartz, atau AWS.

Penyusun

KolomModeNilai
Menit0–59
Jam0–23
Tanggal1–31, L
Bulan1–12 atau JAN–DEC
Hari dalam minggu0–7 (0 dan 7 = Minggu) atau SUN–SAT

Cara membuat ekspresi cron

  1. Ketik atau tempel ekspresi di Ekspresi cron, atau pilih salah satu dari Preset. Makro seperti @daily atau @weekly juga diterima.
  2. Atau gunakan Penyusun: untuk setiap kolom, pilih Mode (Setiap, Setiap N, Nilai tertentu, Rentang, atau Kustom) lalu isi Nilai. Ekspresinya diperbarui seiring Anda mengisi, dan mengedit ekspresi juga memperbarui penyusun.
  3. Centang Tambahkan kolom detik (6 kolom) jika penjadwal Anda mendukung detik.
  4. Baca jadwalnya di bagian Dalam kata-kata (dalam bahasa Indonesia), lalu periksa daftar Jadwal berikutnya. Pilih Zona waktu server yang menjalankan job dan Berapa banyak jadwal yang ingin ditampilkan.
  5. Salin ekspresinya dengan Salin, atau gunakan salah satu dari Format lain.

Kesalahan dijelaskan per kolom, misalnya “Menit: 61 di luar rentang (0–59)”, sehingga Anda tahu persis apa yang harus diperbaiki.

Lima kolom cron

Baris cron standar (Vixie) punya lima kolom, lalu perintahnya:

Kolom Nilai yang diizinkan
Menit 0–59
Jam 0–23
Tanggal 1–31
Bulan 1–12 atau JAN–DEC
Hari dalam minggu 0–7 (0 dan 7 adalah Minggu) atau SUN–SAT

Setiap kolom menerima * (setiap nilai), daftar 1,15, rentang 9-17, langkah */15 (setiap 15 satuan), atau rentang dengan langkah 0-30/10. Jadi */15 9-17 * * 1-5 berarti setiap 15 menit dari pukul 09.00 hingga 17.45, Senin sampai Jumat.

Ada satu aturan yang mengejutkan banyak orang: jika Tanggal dan Hari dalam minggu sama-sama dibatasi, cron klasik berjalan jika salah satunya cocok. 0 0 13 * 5 berjalan setiap tanggal 13 dan setiap hari Jumat, bukan hanya pada Jumat tanggal 13. Alat ini menampilkan peringatan dalam kasus tersebut.

Jadwal berikutnya dan zona waktu

Cron memakai jam mesin, atau pengaturan CRON_TZ/TZ di crontab. Daftar Jadwal berikutnya dihitung untuk zona waktu yang Anda pilih, termasuk perubahan daylight saving time: saat perubahan di musim semi, job yang diatur pukul 02.30 bisa terlewat, dan di musim gugur job bisa berjalan sekali atau dua kali tergantung implementasinya. Zona waktu Indonesia (WIB, WITA, WIT) tidak memakai daylight saving time, tetapi server di luar negeri bisa saja memakainya. Untuk job yang harus berjalan tepat sekali, pilih waktu di luar 01.00–03.00 atau gunakan UTC.

Vixie cron, systemd timer, Quartz, dan AWS

  • systemd timer memakai OnCalendar= dengan sintaks berbeda: Mon..Fri *-*-* 09..17:00/15:00. Kondisi hari dan tanggal digabung dengan AND, bukan OR, sehingga sebagian ekspresi cron tidak punya padanan yang persis.
  • Quartz dan Spring menaruh kolom detik di depan dan bisa menambahkan kolom tahun. Salah satu dari dua kolom hari harus ?, dan Quartz menomori hari 1–7 mulai dari Minggu, berbeda dengan 0–6 di cron. Alat ini menulis hari sebagai nama (MON-FRI) untuk menghindari jebakan itu.
  • AWS EventBridge memakai cron(minutes hours day month weekday year): enam kolom, tanpa detik, ? di salah satu kolom hari, dan tahun di akhir.

Cron standar tidak punya kolom detik. Bentuk 6 kolom dengan detik didukung oleh banyak pustaka (node-cron, Spring, Quartz), tetapi tidak oleh crontab sistem.

Pertanyaan yang sering diajukan

Bagaimana cara menjalankan job setiap 5 menit?

Gunakan */5 * * * *. Job berjalan pada menit 0, 5, 10… setiap jam.

Bagaimana cara menjalankan job pada hari terakhir setiap bulan?

Banyak penjadwal menerima L di kolom tanggal: 0 18 L * *. Dengan Vixie cron biasa, jalankan setiap hari pada tanggal 28–31 dan periksa di dalam skrip apakah besok tanggal 1.

Apa fungsi @reboot?

Perintah dijalankan sekali, saat daemon cron dimulai. Tidak ada jadwalnya, sehingga alat ini tidak bisa menampilkan waktu jalannya.

Mengapa job saya tidak berjalan pada waktu yang ditampilkan?

Periksa zona waktu server, crontab pengguna dibandingkan /etc/crontab (yang punya kolom pengguna tambahan), dan PATH: cron dimulai dengan environment yang minimal.

Minggu itu 0 atau 7?

Keduanya. Di kolom hari dalam minggu, 0 dan 7 berarti Minggu, 1 adalah Senin, dan 6 adalah Sabtu.