Lembar Contekan Ekspresi Cron — Jadwalkan Tugas Seperti Profesional
Cron adalah tulang punggung otomatisasi tugas terjadwal pada sistem Unix-like. Baik Anda merotasi log, menjalankan backup database, atau memicu pipeline CI/CD, ekspresi cron mendefinisikan kapan tugas-tugas tersebut dijalankan. Sintaksnya ringkas namun powerful — dan mudah salah jika Anda menebak-nebak.
Referensi ini mencakup setiap bagian sintaks cron dengan contoh praktis yang siap disalin dan ditempel. Jika Anda ingin membangun dan memvalidasi ekspresi secara interaktif, buka Pembangun Ekspresi Cron bersamaan dengan panduan ini.
Sintaks Cron: Lima Field
Ekspresi cron standar terdiri dari lima field yang dipisahkan oleh spasi:
┌───────────── menit (0–59)
│ ┌───────────── jam (0–23)
│ │ ┌───────────── hari dalam bulan (1–31)
│ │ │ ┌───────────── bulan (1–12)
│ │ │ │ ┌───────────── hari dalam minggu (0–7, di mana 0 dan 7 = Minggu)
│ │ │ │ │
* * * * *
Setiap field menerima nilai spesifik, rentang, daftar, atau wildcard. Bersama-sama, lima field menentukan jadwal berulang yang tepat.
| Field | Nilai yang Diizinkan | Karakter Khusus |
|---|---|---|
| Menit | 0–59 | * , - / |
| Jam | 0–23 | * , - / |
| Hari dalam Bulan | 1–31 | * , - / |
| Bulan | 1–12 | * , - / |
| Hari dalam Minggu | 0–7 | * , - / |
Field bulan dan hari dalam minggu juga menerima singkatan tiga huruf (JAN–DEC, SUN–SAT) di sebagian besar implementasi.
Karakter Khusus Dijelaskan
Memahami empat karakter khusus membuka seluruh kekuatan cron:
Asterisk * — "Setiap"
Cocok dengan setiap nilai yang mungkin untuk field tersebut.
* * * * * # Setiap menit dari setiap jam setiap hari
Koma , — "Dan"
Menentukan daftar nilai diskret.
0 9,12,18 * * * # Pada jam 9:00, 12:00, dan 18:00 setiap hari
Tanda Hubung - — "Sampai"
Mendefinisikan rentang inklusif.
0 9-17 * * * # Setiap jam dari jam 9 pagi sampai jam 5 sore
Garis Miring / — "Setiap ke-n"
Menetapkan interval langkah dari awal rentang.
*/10 * * * * # Setiap 10 menit (0, 10, 20, 30, 40, 50)
Anda bisa menggabungkan rentang dengan langkah:
0 9-17/2 * * * # Setiap 2 jam dari jam 9 pagi sampai 5 sore (9, 11, 13, 15, 17)
Contoh Jadwal Cron Umum
Simpan tabel ini di bookmark. Ini adalah jadwal yang akan Anda gunakan berulang-ulang.
| Jadwal | Ekspresi | Penjelasan |
|---|---|---|
| Setiap menit | * * * * * | Berjalan di awal setiap menit |
| Setiap 5 menit | */5 * * * * | Menit 0, 5, 10, 15, …, 55 |
| Setiap 15 menit | */15 * * * * | Menit 0, 15, 30, 45 |
| Setiap jam | 0 * * * * | Pada menit 0 setiap jam |
| Setiap 6 jam | 0 */6 * * * | Pada 00:00, 06:00, 12:00, 18:00 |
| Harian tengah malam | 0 0 * * * | Sekali sehari pada 00:00 |
| Harian jam 3 pagi | 0 3 * * * | Sekali sehari pada 03:00 |
| Setiap Senin jam 9 pagi | 0 9 * * 1 | Mingguan pada hari Senin jam 09:00 |
| Setiap hari kerja jam 8 pagi | 0 8 * * 1-5 | Senin sampai Jumat jam 08:00 |
| Setiap akhir pekan siang | 0 12 * * 0,6 | Sabtu dan Minggu jam 12:00 |
| Tanggal 1 setiap bulan | 0 0 1 * * | Tengah malam tanggal 1 setiap bulan |
| Setiap kuartal (Jan, Apr, Jul, Okt) | 0 0 1 1,4,7,10 * | Tengah malam tanggal 1 bulan kuartal |
| Setiap 15 menit selama jam kerja | */15 9-17 * * 1-5 | Hari kerja, 9 pagi–5 sore, setiap 15 menit |
Tempel ekspresi apapun ke Pembangun Ekspresi Cron untuk memvisualisasikan waktu eksekusi berikutnya.
Pola Lanjutan
Menggabungkan Daftar dan Rentang
Field menerima sintaks campuran. Untuk menjalankan tugas pada jam 8 pagi dan 6 sore di hari kerja:
0 8,18 * * 1-5
Untuk menargetkan bulan tertentu dengan langkah:
0 0 1 1-12/3 * # Setiap 3 bulan mulai Januari (Jan, Apr, Jul, Okt)
Hari dalam Bulan vs. Hari dalam Minggu
Ketika hari dalam bulan dan hari dalam minggu keduanya diatur (bukan *), perilakunya tergantung pada implementasi. Dalam cron standar, tugas berjalan jika salah satu kondisi terpenuhi — ini adalah hubungan OR, bukan AND. Ini mengejutkan banyak orang.
0 0 15 * 1 # Berjalan pada tanggal 15 DAN setiap Senin — bukan "Senin tanggal 15"
Eksekusi Saat Boot
Meskipun bukan ekspresi cron secara teknis, @reboot adalah pintasan yang didukung secara luas:
@reboot /usr/local/bin/start-service.sh
Pintasan umum lainnya:
| Pintasan | Setara |
|---|---|
@yearly | 0 0 1 1 * |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily | 0 0 * * * |
@hourly | 0 * * * * |
Cron di Berbagai Lingkungan
Sintaks lima field bersifat universal, tetapi cara Anda mengkonfigurasi cron bervariasi menurut platform.
Linux Crontab
Yang klasik. Edit crontab pengguna Anda dengan crontab -e:
# Jalankan backup setiap hari jam 2 pagi
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1
Tugas cron sistem di /etc/cron.d/ menyertakan field pengguna tambahan:
0 2 * * * root /usr/local/bin/cleanup.sh
GitHub Actions
GitHub Actions menggunakan sintaks lima field yang sama di dalam trigger schedule. Semua waktu adalah UTC.
on:
schedule:
- cron: '0 3 * * 1-5' # Hari kerja jam 3 pagi UTC
Untuk pembahasan mendalam tentang konfigurasi YAML, lihat YAML untuk Kubernetes dan YAML untuk Docker Compose.
Kubernetes CronJob
Kubernetes membungkus ekspresi cron dalam resource CronJob:
apiVersion: batch/v1
kind: CronJob
metadata:
name: nightly-report
spec:
schedule: "0 2 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: report
image: reporting:latest
command: ["python", "generate_report.py"]
restartPolicy: OnFailure
Kubernetes menggunakan UTC secara default. Mulai v1.25, Anda dapat mengatur timeZone: "Asia/Jakarta" di spesifikasi CronJob.
AWS CloudWatch (EventBridge)
AWS menggunakan sintaks yang sedikit berbeda dengan enam field (menambahkan detik) dan wrapper rate() / cron():
cron(0 3 * * ? *) # Harian jam 3 pagi UTC
Perhatikan karakter ? — AWS memerlukan ini untuk hari dalam bulan atau hari dalam minggu ketika yang lainnya ditentukan. Ini berbeda dari cron standar.
Jebakan Umum
1. Kebingungan Zona Waktu
Cron menggunakan zona waktu sistem di Linux secara default, tetapi Kubernetes dan GitHub Actions berjalan dalam UTC. Tugas yang dijadwalkan 0 9 * * * akan terpicu pada jam 9 pagi UTC, yang merupakan jam 4 sore WIB.
Selalu verifikasi zona waktu mana yang digunakan penjadwal Anda. Untuk konversi timestamp, panduan kami Timestamp Unix Dijelaskan membahas offset UTC secara detail.
2. Eksekusi yang Tumpang Tindih
Jika tugas memakan waktu lebih lama dari interval antara eksekusi, Anda akan mendapat instansi yang tumpang tindih. Script yang berjalan selama 8 menit pada jadwal */5 * * * * akan menumpuk.
Solusi:
- Gunakan file kunci (
flockdi Linux) - Atur
concurrencyPolicy: Forbiddi CronJob Kubernetes - Periksa instansi yang berjalan di awal script Anda
3. Output yang Hilang dan Debugging
Cron tidak menangkap stdout secara default. Selalu redirect output:
*/5 * * * * /path/to/script.sh >> /var/log/myjob.log 2>&1
Jika tugas cron tidak berjalan, periksa:
grep CRON /var/log/sysloguntuk log eksekusi- Izin file pada script
- Variabel lingkungan
PATH— cron memilikiPATHminimal secara default
4. Jebakan "Tanggal 31 Setiap Bulan"
0 0 31 * * # Hanya berjalan di bulan dengan 31 hari
Ini berjalan di Januari, Maret, Mei, Juli, Agustus, Oktober, dan Desember — tetapi diam-diam melewatkan lima bulan lainnya. Jika Anda membutuhkan tugas akhir bulan, pertimbangkan menjalankan pada tanggal 1 dan menyesuaikan logika script Anda, atau gunakan alat yang mendukung semantik "hari terakhir bulan".
5. Lupa Newline di Akhir Crontab
Beberapa implementasi cron memerlukan newline di akhir file crontab. Jika entri terakhir Anda tidak dieksekusi, tambahkan baris kosong di akhir.
Membangun Ekspresi Secara Visual
Menghafal sintaks berfungsi untuk pola umum, tetapi jadwal kompleks lebih mudah dibangun secara visual. Pembangun Ekspresi Cron di alltools.one memungkinkan Anda:
- Memilih nilai untuk setiap field menggunakan dropdown
- Melihat deskripsi jadwal yang mudah dibaca manusia
- Melihat preview waktu eksekusi mendatang
- Menyalin ekspresi final dengan satu klik
Berjalan sepenuhnya di browser Anda — tidak ada data yang dikirim ke server manapun.
Kartu Referensi Cepat
Salin blok ini ke dokumentasi proyek atau wiki tim Anda:
# ┌───── min (0-59)
# │ ┌───── jam (0-23)
# │ │ ┌───── hari dalam bulan (1-31)
# │ │ │ ┌───── bulan (1-12)
# │ │ │ │ ┌───── hari dalam minggu (0-7, Min=0 atau 7)
# │ │ │ │ │
# * * * * *
*/5 * * * * # Setiap 5 menit
0 * * * * # Setiap jam
0 0 * * * # Harian tengah malam
0 9 * * 1-5 # Hari kerja jam 9 pagi
0 0 1 * * # Tanggal 1 setiap bulan
*/15 9-17 * * 1-5 # Setiap 15 menit, jam kerja
Bacaan Lanjutan
- Timestamp Unix Dijelaskan — Memahami waktu epoch dan konversi zona waktu
- YAML untuk Kubernetes — Mengkonfigurasi CronJob dan resource Kubernetes lainnya
- YAML untuk Docker Compose — Menjadwalkan kontainer di konfigurasi compose
Siap membangun ekspresi cron berikutnya? Buka Pembangun Ekspresi Cron dan atur jadwal Anda dengan benar sejak pertama kali.