# CronJob

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

Suatu CronJob menciptakan [Job](/id/docs/concepts/workloads/controllers/jobs-run-to-completion/) yang dijadwalkan berdasarkan waktu tertentu.

Satu objek CronJob sepadan dengan satu baris pada _file_ _crontab_ (_cron table_). CronJob tersebut menjalankan suatu pekerjaan secara berkala
pada waktu tertentu, dituliskan dalam format [Cron](https://en.wikipedia.org/wiki/Cron).


<div class="alert alert-info" role="note"><h4 class="alert-heading">Catatan:</h4>Seluruh waktu <code>schedule:</code> pada <em><strong>CronJob</strong></em> mengikuti zona waktu dari <em>master</em> di mana Job diinisiasi.</div>


Untuk panduan dalam berkreasi dengan _cron job_, dan contoh _spec file_ untuk suatu _cron job_, lihat [Menjalankan otomasi _task_ dengan _cron job_](/id/docs/tasks/job/automated-tasks-with-cron-jobs).




<!-- body -->

## Limitasi _Cron Job_

Suatu _cron job_ menciptakan _kurang lebih_ satu objek Job setiap penjadwalan. Istilah yang digunakan adalah "_kurang lebih_" karena
terdapat beberapa kasus yang menyebabkan dua Job terbuat, atau tidak ada Job sama sekali yang terbuat. Kemungkinan-kemungkinan
seperti itu memang diusahakan untuk tidak sering terjadi, tapi tidak ada jaminan kemungkinan-kemungkinan tersebut tidak akan pernah terjadi.
Oleh karena itu, Job sudah sepantasnya memiliki sifat idempoten.

Jika pengaturan `startingDeadlineSeconds` menggunakan nilai yang besar atau tidak diatur (menggunakan nilai _default_)
dan jika pengaturan `concurrencyPolicy` dijadikan `Allow`, Job yang terbuat akan dijalankan paling tidak satu kali.

CronJob _controller_ memeriksa berapa banyak jadwal yang terlewatkan sejak waktu terakhir eksekusi hingga saat ini. Jika terdapat lebih dari 100 jadwal yang terlewat, maka CronJob _controller_ tidak memulai Job dan mencatat kesalahan:

````
Cannot determine if job needs to be started. Too many missed start time (> 100). Set or decrease .spec.startingDeadlineSeconds or check clock skew.
````

Perlu diingat bahwa jika pengaturan `startingDeadlineSeconds` memiliki suatu nilai (bukan `nil`), CronJob _controller_ akan menghitung berapa banyak Job yang terlewatkan dari sejak `startingDeadlineSeconds` hingga sekarang dan bukan sejak waktu terakhir eksekusi. Misalnya: Jika `startingDeadlineSeconds` memiliki nilai `200`, CronJob _controller_ akan menghitung berapa banyak Job yang terlewatkan dalam 200 detik terakhir.

Suatu CronJob dianggap terlewat jika ia gagal diciptakan pada waktu yang semestinya. Misalnya: Jika pengaturan `concurrencyPolicy` dijadikan `Forbid`
dan suatu CronJob dicoba dijadwalkan saat masih ada penjadwalan sebelumnya yang masih berjalan, maka ia akan dianggap terlewat.

Contoh: Suatu CronJob akan menjadwalkan Job baru tiap satu menit dimulai sejak `08:30:00`, dan `startingDeadlineSeconds` tidak diatur.
Jika CronJob _controller_ tidak aktif dari `08:29:00` sampai `10:21:00`, Job tidak akan dijalankan karena jumlah Job yang terlewat
sudah lebih dari 100.

Sebagai ilustrasi lebih lanjut, misalkan suatu CronJob diatur untuk menjadwalkan Job baru setiap satu menit dimulai sejak `08:30:00`,
dan `startingDeadlineSeconds` memiliki nilai `200`. Jika CronJob _controller_ tidak aktif seperti pada contoh sebelumnya (`08:29:00` sampai `10:21:00`),
Job akan tetap dijalankan pada 10:22:00. Hal ini terjadi karena CronJob _controller_ memeriksa banyaknya jadwal yang terlewatkan pada 200 detik terakhir
(dalam kasus ini: 3 jadwal terlewat), dan bukan dari sejak waktu eksekusi terakhir.

CronJob hanya bertanggung-jawab untuk menciptakan Job yang sesuai dengan jadwalnya sendiri,
dan Job tersebut bertanggung jawab terhadap pengelolaan Pod yang direpresentasikan olehnya.
