alltools.one
DevOps
2026-02-25
11 min
alltools.one Team
cronschedulingdevopsautomationlinux

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.

FieldNilai yang DiizinkanKarakter Khusus
Menit0–59* , - /
Jam0–23* , - /
Hari dalam Bulan1–31* , - /
Bulan1–12* , - /
Hari dalam Minggu0–7* , - /

Field bulan dan hari dalam minggu juga menerima singkatan tiga huruf (JANDEC, SUNSAT) 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.

JadwalEkspresiPenjelasan
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 jam0 * * * *Pada menit 0 setiap jam
Setiap 6 jam0 */6 * * *Pada 00:00, 06:00, 12:00, 18:00
Harian tengah malam0 0 * * *Sekali sehari pada 00:00
Harian jam 3 pagi0 3 * * *Sekali sehari pada 03:00
Setiap Senin jam 9 pagi0 9 * * 1Mingguan pada hari Senin jam 09:00
Setiap hari kerja jam 8 pagi0 8 * * 1-5Senin sampai Jumat jam 08:00
Setiap akhir pekan siang0 12 * * 0,6Sabtu dan Minggu jam 12:00
Tanggal 1 setiap bulan0 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-5Hari 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:

PintasanSetara
@yearly0 0 1 1 *
@monthly0 0 1 * *
@weekly0 0 * * 0
@daily0 0 * * *
@hourly0 * * * *

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 (flock di Linux)
  • Atur concurrencyPolicy: Forbid di 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/syslog untuk log eksekusi
  • Izin file pada script
  • Variabel lingkungan PATH — cron memiliki PATH minimal 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


Siap membangun ekspresi cron berikutnya? Buka Pembangun Ekspresi Cron dan atur jadwal Anda dengan benar sejak pertama kali.

Published on 2026-02-25
Cron Expression Cheat Sheet — Schedule Like a Pro | alltools.one