REFERENSI CEPAT CRON
Penjadwalan job, sintaks crontab, string khusus, logging
Sintaks
Format Crontab
# ┌───── minute (0-59)
# │ ┌───── hour (0-23)
# │ │ ┌───── day of month (1-31)
# │ │ │ ┌───── month (1-12)
# │ │ │ │ ┌───── day of week (0-7, 0&7=Sun)
# * * * * * command
Nilai Field
| * | Nilai apapun (wildcard) |
| , | Daftar nilai: 1,3,5 |
| - | Range: 1-5 |
| / | Langkah: */10 (setiap 10) |
| 0-59 | Range menit |
| 0-23 | Range jam |
| 1-31 | Range hari dalam bulan |
| 1-12 | Range bulan (atau JAN-DEC) |
| 0-7 | Hari dalam seminggu (0&7=Min, atau SUN-SAT) |
String Khusus
Jadwal Singkatan
| @reboot | Jalankan sekali saat startup |
| @yearly | 0 0 1 1 * — sekali setahun (1 Jan) |
| @monthly | 0 0 1 * * — sekali sebulan (tanggal 1) |
| @weekly | 0 0 * * 0 — sekali seminggu (Minggu) |
| @daily | 0 0 * * * — sekali sehari (tengah malam) |
| @hourly | 0 * * * * — sekali sejam |
Contoh
Jadwal Umum
30 2 * * * /usr/local/bin/backup.sh
0 9 * * 1-5 /opt/report.sh
*/15 * * * * /usr/bin/health-check.sh
0 0 1 * * /opt/monthly-cleanup.sh
0 8,17 * * * /opt/notify.sh
Rincian Jadwal
| 30 2 * * * | Setiap hari pukul 02:30 |
| 0 9 * * 1-5 | Hari kerja pukul 09:00 |
| */15 * * * * | Setiap 15 menit |
| 0 0 1 * * | Hari pertama bulan, tengah malam |
| 0 8,17 * * * | Setiap hari pukul 08:00 dan 17:00 |
Environment
Mengatur Variabel
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
[email protected]
HOME=/home/deploy
* * * * * /opt/myjob.sh
Catatan Environment
| SHELL | Shell untuk menjalankan perintah (default /bin/sh) |
| PATH | Search path (default cron sangat minimal) |
| MAILTO | Kirim output ke alamat ini (kosong = tidak ada email) |
| HOME | Direktori home untuk cron job |
Logging
Output & Logging
# redirect stdout + stderr to a log file
*/5 * * * * /opt/job.sh >> /var/log/job.log 2>&1
# discard all output
0 3 * * * /opt/job.sh > /dev/null 2>&1
# log only errors
0 3 * * * /opt/job.sh > /dev/null 2>> /var/log/job-err.log
Melihat Log Cron
# Debian / Ubuntu (syslog)
grep CRON /var/log/syslog
# RHEL / CentOS
cat /var/log/cron
# journalctl (systemd)
journalctl -u cron --since "1 hour ago"
Jadwal Umum
Pola Sehari-hari
| 0 * * * * | Setiap jam tepat |
| */5 * * * * | Setiap 5 menit |
| */30 * * * * | Setiap 30 menit |
| 0 0 * * * | Setiap hari tengah malam |
| 0 6 * * 1 | Setiap Senin pukul 06:00 |
| 0 0 1,15 * * | Tanggal 1 dan 15 setiap bulan |
| 0 0 * * 5 | Setiap Jumat tengah malam |
| 0 0 1 1 * | Setiap 1 Januari |
Perintah crontab
Mengelola Crontab
crontab -e # edit your crontab
crontab -l # list your crontab
crontab -r # remove your crontab
crontab -u alice -l # list another user's (root)
crontab /path/to/file # install crontab from file
Lokasi Crontab Sistem
| /etc/crontab | Crontab seluruh sistem (ada field user) |
| /etc/cron.d/ | File cron tambahan |
| /etc/cron.daily/ | Script yang dijalankan harian |
| /etc/cron.hourly/ | Script yang dijalankan per jam |
| /etc/cron.weekly/ | Script yang dijalankan mingguan |
| /etc/cron.monthly/ | Script yang dijalankan bulanan |
| /var/spool/cron/ | Penyimpanan crontab per-user |
Tips
Praktik Terbaik
| Gunakan path absolut | PATH cron minimal; selalu gunakan path lengkap |
| Redirect output | Hindari banjir email dengan > /dev/null 2>&1 |
| Lock file | Gunakan flock untuk mencegah eksekusi tumpang tindih |
| Test dulu | Jalankan perintah secara manual sebelum dijadwalkan |
| Gunakan MAILTO | Set MAILTO="" untuk matikan semua email |
| Periksa timezone | Cron menggunakan waktu sistem; verifikasi dengan date |
Mencegah Overlap dengan flock
# only run if not already running
* * * * * /usr/bin/flock -n /tmp/job.lock /opt/job.sh