Cron Jobs & Scheduling
Cron adalah scheduler bawaan Unix/Linux untuk menjalankan perintah secara otomatis pada waktu tertentu — tanpa perlu kamu duduk di depan komputer.
Format Cron Expression
┌───────────── menit (0-59)
│ ┌───────────── jam (0-23)
│ │ ┌───────────── hari (1-31)
│ │ │ ┌───────────── bulan (1-12)
│ │ │ │ ┌───────────── hari dalam seminggu (0-7, 0&7=Minggu)
│ │ │ │ │
* * * * * perintah-yang-dijalankan
Simbol khusus:
| Simbol | Arti | Contoh |
|---|---|---|
* |
Setiap nilai | * * * * * = setiap menit |
, |
Beberapa nilai | 0,30 = menit 0 dan 30 |
- |
Range | 1-5 = Senin sampai Jumat |
/ |
Interval | */15 = setiap 15 menit |
Contoh Cron Expression
# Setiap menit
* * * * * /script.sh
# Setiap jam (menit 0)
0 * * * * /script.sh
# Setiap hari jam 9 pagi
0 9 * * * /script.sh
# Setiap hari kerja (Senin-Jumat) jam 9 pagi
0 9 * * 1-5 /script.sh
# Setiap Senin jam 8 pagi
0 8 * * 1 /script.sh
# Setiap 15 menit
*/15 * * * * /script.sh
# Setiap hari jam 00:00 tengah malam
0 0 * * * /backup.sh
# Setiap tanggal 1 jam 00:00 (awal bulan)
0 0 1 * * /monthly-report.sh
# Setiap tanggal 1 Januari jam 00:00
0 0 1 1 * /yearly-cleanup.sh
# Setiap 5 menit pada jam kerja (8-17, Senin-Jumat)
*/5 8-17 * * 1-5 /check-service.sh
Mengelola Crontab
# Edit crontab user saat ini
crontab -e
# Lihat crontab aktif
crontab -l
# Hapus semua crontab
crontab -r
# Edit crontab user lain (root only)
crontab -e -u www-data
Menulis Cron Job yang Baik
# ── Selalu gunakan path absolut ───────────────────────
0 9 * * * /usr/bin/python3 /home/budi/scripts/backup.py
# ── Arahkan output ke log ────────────────────────────
0 9 * * * /script.sh >> /var/log/myjob.log 2>&1
# 2>&1 = redirect stderr ke stdout
# ── Abaikan output (silent) ──────────────────────────
0 9 * * * /script.sh > /dev/null 2>&1
# ── Set environment variable ─────────────────────────
MAILTO="" # jangan kirim email
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 2 * * * /scripts/nightly-backup.sh >> /var/log/backup.log 2>&1
Shortcut Cron Khusus
@reboot # saat sistem boot
@yearly # = 0 0 1 1 *
@monthly # = 0 0 1 * *
@weekly # = 0 0 * * 0
@daily # = 0 0 * * *
@hourly # = 0 * * * *
# Contoh
@reboot /scripts/start-server.sh
@daily /scripts/cleanup-temp.sh
Tools Bantu
# Cek apakah cron service berjalan
systemctl status cron
# Lihat log cron
grep CRON /var/log/syslog | tail -20
# Tools online untuk visualisasi
# crontab.guru — masukkan expression, lihat deskripsi
Tips
- Test script dulu secara manual sebelum dijadwalkan
- Gunakan path absolut untuk semua perintah dan file
- Log output selalu ke file agar mudah debug
- Cek timezone — cron berjalan di timezone sistem server
- Gunakan
crontab.guruuntuk validasi expression