Dengan Layanan Cron App Engine, Anda dapat mengonfigurasi tugas yang dijadwalkan secara berkala yang beroperasi pada waktu yang ditentukan atau interval teratur. Tugas ini biasanya disebut cron job. Cron job ini otomatis dipicu oleh Layanan Cron App Engine. Misalnya, Anda mungkin menggunakan cron job untuk mengirim laporan email setiap hari, atau memperbarui beberapa data yang di-cache setiap 10 menit, atau memperbarui informasi ringkasan sekali satu jam.
Cron job akan membuat permintaan GET
HTTP terjadwal ke endpoint yang ditentukan dalam aplikasi yang sama tempat cron job dikonfigurasi. Pengendali untuk endpoint tersebut akan menjalankan logika saat dipanggil.
Layanan Cron App Engine tidak dapat digunakan untuk memanggil endpoint web di luar aplikasi host App Engine. Layanan ini tidak dapat digunakan untuk memanggil endpoint App Engine dari aplikasi lain selain aplikasi host.
Permintaan cron job dikenai batas yang sama dengan batas untuk task queue push.
Sebelum memulai
Untuk men-deploy atau memperbarui jadwal, akun Anda memerlukan salah satu peran IAM berikut:
- Pemilik
- Editor
Anda dapat menetapkan izin pada halaman IAM di Konsol Google Cloud.
Membuat cron job
- Buat file
cron.yaml
di direktori root aplikasi Anda (besertaapp.yaml
). Tambahkan satu atau beberapa entri
<cron>
ke file Anda dan tentukan elemen yang diperlukan untuk tugas Anda, termasuk elemen<url>
dan<schedule>
yang diperlukan. Tinjau opsi dan sintaksis cron.yaml untuk mengetahui detail selengkapnya tentang elemen filecron.yaml
.Contoh berikut membuat cron job dasar yang berjalan setiap hari:
cron: - description: "daily summary job" url: /tasks/summary target: beta schedule: every 24 hours
Spesifikasi target bersifat opsional dan merupakan nama layanan/versi. Jika ada, target akan ditambahkan nama host aplikasi, sehingga tugas diarahkan ke layanan/versi tersebut. Jika target tidak ditentukan, tugas akan berjalan dalam versi layanan
default
yang dikonfigurasi untuk traffic.Buat pengendali untuk URL cron job. Pengendali harus menjalankan tugas apa pun yang ingin Anda jadwalkan. Pengendali harus merespons dengan kode status HTTP antara 200 dan 299 (inklusif) untuk menunjukkan keberhasilan. Kode status lainnya dapat ditampilkan dan dapat digunakan untuk mencoba ulang cron job.
web.xml
harus sama dengan URL cron job.
Menguji cron job di server pengembangan
Server pengembangan lokal tidak otomatis menjalankan cron job Anda. Anda dapat membuat permintaan langsung ke URL cron job untuk menguji fungsionalitas. Anda dapat menggunakan cron lokal atau antarmuka tugas terjadwal untuk memicu URL tugas dengan curl atau alat yang serupa.
Mencoba ulang cron job yang gagal
Jika pengendali permintaan cron job menampilkan kode status yang tidak berada dalam rentang 200–299 (inklusif), App Engine akan menganggap tugas tersebut gagal. Secara default, tugas yang gagal tidak akan dicoba ulang kecuali jika kode status 503 ditampilkan. Dalam hal ini, tugas tersebut dicoba lagi setiap menit hingga berhasil atau menampilkan kode status 200-299.
Untuk menetapkan tugas yang gagal agar dicoba ulang:
- Sertakan blok
retry_parameters
dalam filecron.yaml
Anda. Pilih dan setel parameter percobaan ulang dalam blok
retry_parameters
.Misalnya, contoh file
cron.yaml
ini berisi satu cron job yang dikonfigurasi untuk mencoba ulang hingga lima kali (default) dengan backoff awal selama 2,5 detik yang berlipat ganda setiap kali dijalankan.cron: - description: "retry demo" url: /retry schedule: every 10 mins retry_parameters: min_backoff_seconds: 2.5 max_doublings: 5
Pelajari lebih lanjut opsi percobaan ulang cron.
Men-deploy cron job
Untuk men-deploy cron job yang ditentukan dalam file konfigurasi cron.yaml
, jalankan perintah berikut:
gcloud
gcloud app deploy cron.yaml
Maven
mvn appengine:deployCron cron.yaml
Gradle
gradle appengineDeployCron cron.yaml
IDE
Jika Anda menggunakan IntelliJ atau Eclipse, pilih setiap file konfigurasi yang akan di-deploy menggunakan formulir deployment.
Menghapus semua cron job
Untuk menghapus semua cron job:
Edit isi file
cron.yaml
menjadi:cron:
Deploy file
cron.yaml
ke App Engine.
Mengamankan URL untuk cron
Pengendali cron hanyalah pengendali biasa yang ditentukan dalam app.yaml
. Anda dapat mencegah pengguna mengakses URL yang digunakan oleh tugas terjadwal dengan membatasi akses ke akun administrator. Tugas terjadwal dapat mengakses URL khusus admin. Anda dapat membatasi URL dengan menambahkan login: admin
ke konfigurasi pengendali di app.yaml
.
Contohnya mungkin terlihat seperti ini di app.yaml
:
application: hello-cron
version: 1
runtime: java
api_version: 1
handlers:
- url: /report/weekly
servlet: mysite.server.CronServlet
login: admin
Untuk menguji cron job, login sebagai administrator dan buka URL pengendali di browser Anda.
Permintaan dari Layanan Cron juga akan berisi header HTTP:
X-Appengine-Cron: true
Header X-Appengine-Cron
ditetapkan secara internal oleh App Engine. Jika pengendali permintaan Anda menemukan header ini, pengendali dapat memercayai bahwa permintaan tersebut adalah permintaan cron. Jika muncul pada permintaan pengguna eksternal ke aplikasi Anda, header akan dihapus, kecuali untuk permintaan dari administrator aplikasi yang login, yang diizinkan menetapkan header untuk tujuan pengujian.
App Engine akan menerbitkan permintaan Cron dari alamat IP 0.1.0.2
. Untuk Cron job yang dibuat dengan versi gcloud sebelumnya (sebelum versi 326.0.0), permintaan Cron akan berasal dari 0.1.0.1
.
Memanggil Google Cloud Endpoints
Anda tidak dapat menentukan Google Cloud Endpoint di kolom url
pada cron job.
Jika Anda ingin cron job memanggil Google Cloud Endpoint, kirimkan permintaan ke target yang disajikan oleh pengendali di aplikasi Anda, lalu panggil class dan metode endpoint dari kode pengendali.
Melihat cron job di Konsol Google Cloud
Anda dapat melihat cron job terjadwal di tab Cron Job App Engine di Cloud Scheduler.
Anda juga dapat melihat log untuk mengetahui kapan cron job ditambahkan atau dihapus.
Pelajari lebih lanjut
Lihat informasi mendetail tentang cara menentukan cron job di cron.yamlReference.