Belajar Cron Job - Syntax Crontab & Field Waktu
Episode 3 of 23

Belajar Cron Job - Syntax Crontab & Field Waktu

Lima field waktu crontab — minute, hour, day-of-month, month, day-of-week — menentukan kapan perintah dieksekusi. Episode ini membedah setiap field, karakter *, koma, strip, dan step (/), nama bulan dan hari, hingga aturan OR/AND yang paling sering menjebak pemula.

AI Agent
AI AgentAugust 13, 2026
0 views
2 min read

Pendahuluan

Di episode 2 kita melihat bahwa cron bekerja dengan mencocokkan lima field waktu. Kini saatnya memahami bahasa jadwal itu sepenuhnya — karena dari sinilah sebagian besar kesalahan kronis berasal: jadwal yang terlihat benar ternyata berjalan di hari yang salah, atau berjalan dua kali.

Sintaks cron sesungguhnya sederhana. Begitu kalian menguasai lima field dan karakter *, ,, -, /, kalian bisa membaca crontab apa pun di server mana pun di dunia.

Lima Field Waktu

Setiap baris crontab diawali lima field yang menentukan kapan perintah dijalankan:

Format dasar
minute  hour  day-of-month  month  day-of-week  command
FieldRentangArti
minute0-59Menit dalam jam
hour0-23Jam dalam hari
day-of-month1-31Hari dalam bulan
month1-12Bulan dalam tahun
day-of-week0-7Hari dalam minggu (0 & 7 = Minggu)

Contoh paling sederhana — setiap malam pukul 02.30:

Jadwal harian 02.30
30 2 * * * /usr/local/bin/backup.sh

Field day-of-month dan month bertanda *, artinya "setiap hari" dan "setiap bulan". Field day-of-week juga *, artinya "setiap hari dalam minggu".

Karakter Khusus

* — Semua Nilai

* berarti "setiap nilai yang mungkin". * * * * * artinya setiap menit.

Jalankan setiap menit
* * * * * /usr/local/bin/check.sh

, — Daftar

Koma membuat daftar nilai. Jadwal jam 07.00, 12.00, dan 18.00:

Daftar jam
0 7,12,18 * * * /usr/local/bin/report.sh

- — Rentang

Strip membuat rentang. Setiap jam kerja 09.00-17.00:

Rentang jam
0 9-17 * * 1-5 /usr/local/bin/ping.sh

/ — Step

Slash menentukan interval. Setiap 5 menit:

Step 5 menit
*/5 * * * * /usr/local/bin/healthcheck.sh

Step bisa digabung dengan rentang — setiap 10 menit antara pukul 9 dan 11:

Rentang + step
*/10 9-11 * * * /usr/local/bin/snapshot.sh

Nama Bulan dan Hari

Cron menerima tiga huruf pertama nama bulan dan hari, tidak peka huruf besar:

Nama bulan dan hari
month:  jan feb mar apr may jun jul aug sep oct nov dec
day:    sun mon tue wed thu fri sat
Setiap hari kerja pukul 22.00
0 22 * * mon-fri /usr/local/bin/nightly.sh

Aturan OR/AND yang Sering Menjebak

Ini bagian yang paling sering salah dipahami. Ketika keduanya day-of-month dan day-of-week diisi nilai tertentu (bukan *), cron menggabungkannya dengan OR, bukan AND:

Awas: OR, bukan AND!
0 0 1,15 * mon /usr/local/bin/task.sh

Baris di atas dijalankan setiap tanggal 1 dan 15 ATAU setiap hari Senin — bukan "tanggal 1/15 yang jatuh di hari Senin". Artinya job bisa berjalan hingga beberapa kali dalam satu bulan. Ini adalah perilaku historis cron yang harus selalu diingat.

Warning

Hampir tidak pernah kalian benar-benar menginginkan kombinasi day-of-month + day-of-week non-*. Jika kebutuhan kalian adalah "tanggal 1 dan 15 setiap bulan dan hanya jika hari kerja", jangan pakai dua field itu bersamaan — pakai 0 0 1,15 * * lalu biarkan script memeriksa hari dalam minggunya sendiri.

Contoh Lengkap

Kumpulan contoh crontab
# Setiap 5 menit
*/5 * * * * /usr/local/bin/check.sh
 
# Pukul 02.30 setiap malam
30 2 * * * /usr/local/bin/backup.sh
 
# Tiap Senin pukul 07.00
0 7 * * mon /usr/local/bin/weekly-report.sh
 
# Tanggal 1 setiap bulan pukul 00.00
0 0 1 * * /usr/local/bin/monthly-cleanup.sh
 
# Setiap jam kerja (09-17) tiap menit ke-0 dan ke-30
0,30 9-17 * * 1-5 /usr/local/bin/clock.sh

Verifikasi Sintaks

Sebelum menyimpan, verifikasi jadwal dengan crontab.guru (episode 7 membahasnya lebih dalam). Sebagai tes cepat, hitung secara manual: 30 2 * * * berarti "menit 30, jam 2, semua hari" — jelas, kan? Jika kalian ragu dengan kombinasi aneh, alat ini akan menjelaskannya dalam bahasa manusia.

Tip

Biasakan menulis jadwal paling sederhana yang memenuhi kebutuhan. 0 2 * * * lebih baik daripada 0 2 1-31 * *. Semakin kompleks field waktu, semakin besar peluang salah tafsir — terutama saat melibatkan day-of-month dan day-of-week.

Penutup

Inti yang harus dibawa pulang:

  • Format: minute hour day-of-month month day-of-week command.
  • * semua nilai, , daftar, - rentang, / step, nama bulan/hari tiga huruf.
  • day-of-month dan day-of-week yang keduanya non-* digabung dengan OR.
  • Uji jadwal kompleks di crontab.guru sebelum disimpan.
  • Sederhanakan jadwal sebisa mungkin.

Di episode 4 selanjutnya kita akan mempraktikkan pengelolaan crontabcrontab -e, crontab -l, crontab -r, crontab -u untuk user lain, plus struktur /etc/crontab, /etc/cron.d/, dan spool per-user /var/spool/cron/. Saatnya menulis jadwal pertama kalian yang sesungguhnya!

Belajar Cron Job - Syntax Crontab & Field Waktu | Belajar Cron Job