DevToolPal
ID

Ekspresi cron

Hari terakhir setiap bulan

Cron standar tidak punya simbol "hari terakhir", jadi tugas berjalan pada tanggal 28–31 dan uji shell hanya melanjutkan bila besok tanggal 1.

0 0 28-31 * * Buka di Pengurai Ekspresi Cron

Baris crontab memakai GNU date (date -d tomorrow); di macOS gunakan date -v+1d. Quartz dan Spring mendukung L secara langsung. Di Kubernetes dan GitHub Actions, tambahkan pemeriksaan tanggal yang sama di awal tugas.

Per kolom

Kolom Nilai Cocok dengan
Menit 0 0
Jam 0 0
Tanggal 28-31 28, 29, 30, 31
Bulan * Semua nilai
Hari * Semua nilai

Waktu eksekusi berikutnya

Contoh: 6 eksekusi pertama setelah 1 Januari 2026 (UTC).

  1. Sab, 31 Jan 2026, 00.00
  2. Sab, 28 Feb 2026, 00.00
  3. Sel, 31 Mar 2026, 00.00
  4. Kam, 30 Apr 2026, 00.00
  5. Min, 31 Mei 2026, 00.00
  6. Sel, 30 Jun 2026, 00.00

Versi siap pakai

crontab
0 0 28-31 * * [ "$(date -d tomorrow +\%d)" = 01 ] && /path/to/command

Tambahkan baris ini dengan crontab -e. Baris berjalan di zona waktu server kecuali CRON_TZ atau TZ diatur.

Kubernetes CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
  name: last-day-of-month
spec:
  schedule: "0 0 28-31 * *"
  timeZone: "Etc/UTC"
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: job
              image: busybox:1.36
              command: ["/bin/sh", "-c", "date; echo run"]

Atur spec.timeZone (Kubernetes 1.27+); tanpanya jadwal mengikuti zona waktu controller manager, biasanya UTC.

GitHub Actions
on:
  schedule:
    - cron: '0 0 28-31 * *'
  workflow_dispatch:

GitHub Actions selalu memakai UTC, hanya menerima interval minimal 5 menit, dan bisa terlambat memulai saat beban tinggi.

Quartz
0 0 0 L * ?

Quartz menaruh detik di depan dan butuh ? di tanggal atau hari. Hari bernomor 1–7 mulai Minggu, jadi memakai nama lebih aman.

Spring
@Scheduled(cron = "0 0 0 L * *")

Spring @Scheduled(cron = …) memakai enam kolom: detik, lalu lima kolom biasa.

FAQ

› Mengapa % ditulis sebagai \% di crontab?

Dalam baris crontab, % berarti baris baru (input untuk perintah). Tulis \% agar format tanggal sampai ke shell tanpa berubah.

› Di zona waktu mana 0 0 28-31 * * berjalan?

Cron memakai zona waktu mesin atau layanan yang menjalankannya. Di Linux itu zona waktu sistem kecuali CRON_TZ atau TZ diatur; CronJob Kubernetes mendukung spec.timeZone; GitHub Actions selalu memakai UTC.

› Bagaimana memeriksa jadwal ini sebelum deploy?

Buka 0 0 28-31 * * di Pengurai Ekspresi Cron di situs ini. Alat itu menjelaskan setiap kolom dan menampilkan eksekusi berikutnya dalam waktu lokal atau UTC, langsung di browser.