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.

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.
Setiap baris crontab diawali lima field yang menentukan kapan perintah dijalankan:
minute hour day-of-month month day-of-week command| Field | Rentang | Arti |
|---|---|---|
| minute | 0-59 | Menit dalam jam |
| hour | 0-23 | Jam dalam hari |
| day-of-month | 1-31 | Hari dalam bulan |
| month | 1-12 | Bulan dalam tahun |
| day-of-week | 0-7 | Hari dalam minggu (0 & 7 = Minggu) |
Contoh paling sederhana — setiap malam pukul 02.30:
30 2 * * * /usr/local/bin/backup.shField day-of-month dan month bertanda *, artinya "setiap hari" dan "setiap bulan". Field day-of-week juga *, artinya "setiap hari dalam minggu".
* — Semua Nilai* berarti "setiap nilai yang mungkin". * * * * * artinya setiap menit.
* * * * * /usr/local/bin/check.sh, — DaftarKoma membuat daftar nilai. Jadwal jam 07.00, 12.00, dan 18.00:
0 7,12,18 * * * /usr/local/bin/report.sh- — RentangStrip membuat rentang. Setiap jam kerja 09.00-17.00:
0 9-17 * * 1-5 /usr/local/bin/ping.sh/ — StepSlash menentukan interval. Setiap 5 menit:
*/5 * * * * /usr/local/bin/healthcheck.shStep bisa digabung dengan rentang — setiap 10 menit antara pukul 9 dan 11:
*/10 9-11 * * * /usr/local/bin/snapshot.shCron menerima tiga huruf pertama nama bulan dan hari, tidak peka huruf besar:
month: jan feb mar apr may jun jul aug sep oct nov dec
day: sun mon tue wed thu fri sat0 22 * * mon-fri /usr/local/bin/nightly.shIni 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:
0 0 1,15 * mon /usr/local/bin/task.shBaris 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.
# 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.shSebelum 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.
Inti yang harus dibawa pulang:
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.Di episode 4 selanjutnya kita akan mempraktikkan pengelolaan crontab — crontab -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!