Cron Ekspresi Generator

Bangun dan pahami jadwal tugas cron secara visual.

Preset cepat

* * * * *

5 eksekusi berikutnya

Referensi sintaks cron

* · nilai apa pun

*/5 · setiap 5 unit

1,15 · pada nilai 1 dan 15

1-5 · rentang dari 1 hingga 5

Kolom: menit (0-59), jam (0-23), hari dalam bulan (1-31), bulan (1-12), hari dalam pekan (0-6, 0=Minggu)

Sejarah singkat ekspresi cron

Ekspresi cron lima bidang berasal dari Mei 1975, ketika versi awal dikirim dari AT&T Bell Laboratories sebagai bagian dari Research Unix Versi 7. Nama tersebut mengacu pada Chronos, personifikasi Yunani dari waktu. Formatnya sederhana: lima bidang yang dipisahkan oleh spasi (menit, jam, hari-dalam-bulan, bulan, hari-dalam-minggu) pada satu baris di /usr/lib/crontab. Penulisan ulang Vixie cron oleh Paul Vixie pada 1987 menjadi implementasi modern de facto; setiap distribusi Linux utama mengirim cron turunan Vixie, dan Vixie menambahkan crontab per pengguna, dukungan variabel lingkungan (MAILTO=, CRON_TZ=), dan makro pintasan @hourly / @daily / @reboot yang digunakan semua orang hari ini. Sintaks ekspresi cron kemudian bercabang ke dua jalur. Quartz Scheduler (Java, James House, 1998; disumbangkan ke Apache dan Terracotta) menambahkan bidang detik di depan, bidang tahun opsional di belakang, dan operator L (terakhir) / W (hari kerja) / # (kejadian ke-n), menghasilkan cron enam bidang yang kemudian diadopsi AWS EventBridge (semula CloudWatch Events, 2014) dan anotasi @Scheduled Spring. Format NCronTab yang digunakan oleh Azure Functions (2016) meletakkan detik pertama tetapi tetap mempertahankan lima bidang perilaku. Era cloud kemudian menstandarisasi format Vixie lima bidang sebagai lingua franca: Kubernetes CronJobs (alpha 1.4 di 2016, GA di 1.21 di 2021) menerima persis lima bidang, demikian pula GitHub Actions (on.schedule.cron, 2019), GCP Cloud Scheduler (2018), dan Vercel Cron Jobs (2022). Pembangun cron visual, kategori tempat alat ini berada, muncul sekitar 2010-2015: crontab.guru (Christine Dodrill, 2014) menjadi referensi yang paling banyak dikutip, dan pustaka cron-descriptor (Brady Holt, awalnya .NET, diporting ke Java/Python/JS) menggerakkan sebagian besar lapisan terjemahan «cron dalam bahasa Inggris sederhana» yang menjadi dasar bagi decoder dan generator. Setengah abad setelah Bell Labs, lima bidang yang sama masih menjadwalkan backup malam dunia.

Anatomi ekspresi cron

Di mana ekspresi digunakan

Standar, dialek, dan tonggak sejarah

Pertanyaan yang lebih sering ditanyakan

Apakah lima bidang sama dengan enam atau tujuh?

Tidak. Bentuk POSIX klasik adalah lima bidang (menit, jam, hari-dalam-bulan, bulan, hari-dalam-minggu). Quartz dan Spring menggunakan enam bidang dengan menambahkan kolom detik di depan, dan Quartz menerima bidang tahun ketujuh opsional. AWS EventBridge selalu menggunakan enam bidang yang berakhir di tahun (cron(min hr dom mon dow yr)). Menempelkan ekspresi lima bidang ke Quartz atau Spring memunculkan kesalahan sintaks; menempelkan ekspresi enam bidang ke Linux secara diam-diam salah menafsirkan bidang.

Apa interval terkecil yang dapat diungkapkan cron?

Setiap menit (* * * * *) di cron Unix standar. Tidak ada bidang detik bawaan. Penjadwal seperti Quartz atau NCronTab menambahkan satu jika Anda membutuhkan kecepatan sub-menit, dan timer systemd dapat menggunakan OnUnitActiveSec=30s. GitHub Actions membatasi kecepatan terpendek hingga 5 menit, dan EventBridge menyala dalam jendela 60 detik dari waktu yang dijadwalkan, jadi jangan mengandalkan cron untuk presisi waktu nyata yang ketat.

Bagaimana saya menjalankan pekerjaan di hari terakhir bulan ini?

Cron lima bidang standar tidak memiliki operator native «hari terakhir bulan». Quartz dan AWS EventBridge mendukung L di bidang hari-dalam-bulan: 0 0 L * ? menyala pada tengah malam di hari terakhir. Pada cron Linux biasa, solusi biasa adalah menjadwalkan setiap hari pada hari kandidat dan memfilter perintah: 0 0 28-31 * * [ "$(date +\%d -d tomorrow)" = "01" ] && /path/to/script. Timer systemd mengungkapkannya secara langsung dengan OnCalendar=*-*-* 00:00:00.

Mengapa pekerjaan cron saya tidak berjalan ketika saya harapkan?

Tersangka biasa, secara berurutan: (1) server berada di zona waktu yang berbeda dari yang Anda asumsikan (periksa dengan date); (2) PATH tidak seperti yang dimiliki shell interaktif Anda, jadi perintah berfungsi di prompt tetapi gagal di bawah cron (gunakan path absolut); (3) output pergi ke email dan Anda melewatkannya (atur MAILTO="" atau alihkan ke file log); (4) daemon cron tidak berjalan (systemctl status cron); (5) jebakan OR (lihat di atas) menyala pada hari ekstra yang tidak Anda maksudkan.

Apa perbedaan antara cron, anacron, dan timer systemd?

Cron berharap sistem berjalan pada waktu yang dijadwalkan dan secara diam-diam melewati pekerjaan yang jatuh selama waktu henti: bagus untuk server selalu menyala, buruk untuk laptop. Anacron melacak stempel waktu terakhir-dijalankan per pekerjaan dan mengejar pekerjaan yang terlewat setelah reboot, dengan biaya presisi tingkat hari daripada menit. Timer systemd menggantikan cron di sebagian besar distribusi Linux modern: mereka mendukung penjadwalan kalender dan monoton, mencatat ke journald, dapat menyatakan dependensi layanan, dan menggunakan Persistent=true untuk menggabungkan presisi gaya cron dengan pemulihan gaya anacron.

Bagaimana zona waktu dan waktu musim panas memengaruhi cron?

Sebagian besar daemon cron menafsirkan jadwal di zona waktu sistem. Di server cloud itu biasanya berarti UTC, jadi 0 9 * * * menyala pada pukul 9 pagi UTC, bukan pukul 9 pagi lokal. Atur CRON_TZ=America/New_York di crontab Linux; Kubernetes menggunakan spec.timeZone; AWS, GCP, dan Vercel masing-masing menerima zona IANA eksplisit. Selama maju musim semi, pekerjaan yang dijadwalkan pada jam yang dilewati dijalankan segera setelahnya oleh Vixie cron tetapi dilewatkan sepenuhnya oleh AWS EventBridge. Pola yang paling aman adalah meninggalkan cron di UTC dan mengonversi di dalam pekerjaan.

Alat terkait