Halaman ini menjelaskan cara mencoba ulang tugas secara otomatis setelah semua atau beberapa kegagalan.
Tugas Batch gagal jika setidaknya salah satu tugasnya gagal, yang dapat terjadi karena berbagai alasan. Secara default, setiap tugas dalam tugas hanya berjalan sekali; jika tugas gagal, tugas tersebut tidak akan dicoba ulang. Namun, beberapa masalah yang menyebabkan tugas gagal dapat dengan mudah diselesaikan hanya dengan mencoba kembali tugas tersebut. Dalam kasus ini, mengonfigurasi tugas untuk mencoba ulang tugas secara otomatis dapat secara substansial membantu mengurangi hambatan pemecahan masalah dan waktu proses tugas Anda secara keseluruhan.
Percobaan ulang otomatis sangat cocok untuk tugas yang terikat longgar (independen) dan dapat membantu mengatasi berbagai masalah. Misalnya, percobaan ulang tugas otomatis dapat menyelesaikan masalah yang sensitif terhadap waktu seperti berikut:
- preemption Spot VM
- Peristiwa pemeliharaan VM dan error host
- error jaringan sementara
Anda dapat mengonfigurasi percobaan ulang tugas otomatis untuk setiap tugas saat membuat tugas. Secara khusus, untuk setiap tugas, Anda dapat menggunakan salah satu opsi konfigurasi berikut:
- Secara default, setiap tugas tidak akan dicoba ulang jika gagal.
- Mencoba ulang tugas untuk semua kegagalan: Anda dapat mengonfigurasi waktu maksimum untuk mencoba ulang tugas yang gagal secara otomatis. Anda dapat menentukan antara 0 (default) dan 10 percobaan ulang.
- Mencoba kembali tugas untuk beberapa kegagalan: Anda dapat mengonfigurasi berbagai tindakan tugas—baik percobaan ulang otomatis maupun gagal tanpa percobaan ulang—untuk kegagalan tertentu. Tindakan sebaliknya dilakukan untuk semua kegagalan yang tidak ditentukan. Setiap kegagalan tertentu dapat diidentifikasi dengan kode keluar yang ditentukan oleh aplikasi atau Batch Anda.
Sebelum memulai
- Jika belum pernah menggunakan Batch, baca Mulai menggunakan Batch dan aktifkan Batch dengan menyelesaikan prasyarat untuk project dan pengguna.
-
Untuk mendapatkan izin yang diperlukan untuk membuat tugas, minta administrator untuk memberi Anda peran IAM berikut:
-
Batch Job Editor (
roles/batch.jobsEditor
) di project -
Pengguna Akun Layanan (
roles/iam.serviceAccountUser
) di akun layanan tugas, yang secara default adalah akun layanan Compute Engine default
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
-
Batch Job Editor (
Mencoba ulang tugas untuk semua kegagalan
Anda dapat menentukan jumlah maksimum percobaan ulang otomatis (kolom maxRetryCount
) untuk tugas yang gagal dalam tugas menggunakan gcloud CLI atau Batch API.
gcloud
Buat file JSON yang menentukan detail konfigurasi tugas dan kolom
maxRetryCount
.Misalnya, untuk membuat tugas skrip dasar yang menentukan percobaan ulang maksimum untuk tugas yang gagal, buat file JSON dengan konten berikut:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ], "maxRetryCount": MAX_RETRY_COUNT }, "taskCount": 3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Ganti
MAX_RETRY_COUNT
dengan jumlah maksimum percobaan ulang untuk setiap tugas. Agar tugas dapat dicoba ulang, nilai ini harus ditetapkan ke bilangan bulat antara1
dan10
. Jika kolommaxRetryCount
tidak ditentukan, nilai defaultnya adalah0
, yang berarti tidak mencoba kembali tugas apa pun.Untuk membuat dan menjalankan tugas, gunakan perintah
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Ganti kode berikut:
JOB_NAME
: nama tugas.LOCATION
: lokasi tugas.JSON_CONFIGURATION_FILE
: jalur untuk file JSON dengan detail konfigurasi tugas.
API
Buat permintaan POST
ke
metode jobs.create
yang menentukan kolom maxRetryCount
.
Misalnya, untuk membuat tugas skrip dasar yang menentukan percobaan ulang maksimum untuk tugas yang gagal, buat permintaan berikut:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
],
"maxRetryCount": MAX_RETRY_COUNT
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Ganti kode berikut:
PROJECT_ID
: Project ID project Anda.LOCATION
: lokasi tugas.JOB_NAME
: nama tugas.MAX_RETRY_COUNT
: Jumlah maksimum percobaan ulang untuk setiap tugas. Agar tugas dapat dicoba ulang, nilai ini harus ditetapkan ke bilangan bulat antara1
dan10
. Jika kolommaxRetryCount
tidak ditentukan, nilai defaultnya adalah0
, yang berarti tidak mencoba kembali tugas apa pun.
Mencoba ulang tugas untuk beberapa kegagalan
Anda dapat menentukan cara Anda ingin tugas menangani berbagai kegagalan tugas dengan menggunakan
kebijakan siklus proses (kolom lifecyclePolicies[]
).
Kebijakan siklus proses terdiri dari
tindakan (kolom action
),
kondisi tindakan (kolom actionCondition
),
dan kode keluar (kolom exitCodes[]
).
Tindakan yang ditentukan akan diambil setiap kali
kondisi tindakan—kode keluar tertentu—terjadi.
Anda dapat menentukan salah satu tindakan berikut:
RETRY_TASK
: mencoba ulang tugas yang gagal dengan kode keluar yang ditentukan di kolomexitCodes[]
. Tugas yang gagal dengan kode keluar yang tidak ditentukan tidak akan dicoba ulang.FAIL_TASK
: jangan coba lagi tugas yang gagal dengan kode keluar yang ditentukan di kolomexitCodes[]
. Tugas yang gagal dengan kode keluar yang tidak ditentukan akan dicoba lagi.
Secara khusus, setiap tugas yang gagal dengan kode keluar yang tidak ditentukan akan mengambil tindakan yang berlawanan—beberapa kode keluar dicoba lagi dan beberapa gagal.
Oleh karena itu, agar kebijakan siklus proses berfungsi seperti yang diharapkan,
Anda juga perlu menentukan
jumlah maksimum percobaan ulang otomatis (kolom maxRetryCount
)
agar tugas dapat otomatis mencoba ulang tugas yang gagal setidaknya sekali.
Setiap kode keluar mewakili kegagalan tertentu yang ditentukan oleh aplikasi atau Batch Anda. Kode keluar dari 50001 hingga 59999 dicadangkan dan ditentukan oleh Batch. Untuk informasi selengkapnya tentang kode keluar yang dicadangkan, lihat Memecahkan masalah.
Anda dapat menentukan agar tugas dicoba ulang atau gagal setelah kegagalan tertentu menggunakan gcloud CLI atau Batch API.
gcloud
Buat file JSON yang menentukan detail konfigurasi tugas, kolom
maxRetryCount
, dan subkolomlifecyclePolicies[]
.Untuk membuat tugas skrip dasar yang mencoba kembali tugas yang gagal hanya untuk beberapa kode keluar, buat file JSON dengan konten berikut:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ], "maxRetryCount": MAX_RETRY_COUNT, "lifecyclePolicies": [ { "action": "ACTION", "actionCondition": { "exitCodes": [EXIT_CODES] } } ] } } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Ganti kode berikut:
MAX_RETRY_COUNT
: jumlah maksimum percobaan ulang untuk setiap tugas. Agar tugas dapat dicoba ulang, nilai ini harus ditetapkan ke bilangan bulat antara1
dan10
. Jika kolommaxRetryCount
tidak ditentukan, nilai defaultnya adalah0
, yang berarti tidak mencoba kembali tugas apa pun.ACTION
: tindakan, baikRETRY_TASK
atauFAIL_TASK
, yang Anda inginkan untuk tugas yang gagal dengan kode keluar yang ditentukan. Tugas yang gagal dengan kode keluar yang tidak ditentukan akan melakukan tindakan lain.EXIT_CODES
: daftar yang dipisahkan koma dari satu atau beberapa kode keluar yang ingin Anda gunakan untuk memicu tindakan yang ditentukan—misalnya,50001, 50002
.Setiap kode keluar dapat ditentukan oleh aplikasi atau Batch Anda. Kode keluar dari
50001
hingga59999
disediakan oleh Batch. Untuk informasi selengkapnya tentang kode keluar yang dicadangkan, lihat Memecahkan masalah.
Misalnya, tugas berikut hanya mencoba kembali tugas yang gagal karena preemption Spot VM.
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "sleep 30" } } ], "maxRetryCount": 3, "lifecyclePolicies": [ { "action": "RETRY_TASK", "actionCondition": { "exitCodes": [50001] } } ] } } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4", "provisioningModel": "SPOT" } } ] } }
Untuk membuat dan menjalankan tugas, gunakan perintah
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Ganti kode berikut:
JOB_NAME
: nama tugas.LOCATION
: lokasi tugas.JSON_CONFIGURATION_FILE
: jalur untuk file JSON dengan detail konfigurasi tugas.
API
Buat permintaan POST
ke
metode jobs.create
yang menentukan kolom maxRetryCount
dan subkolom lifecyclePolicies[]
.
Untuk membuat tugas skrip dasar yang mencoba ulang tugas yang gagal hanya untuk beberapa kode keluar, buat permintaan berikut:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
],
"maxRetryCount": MAX_RETRY_COUNT,
"lifecyclePolicies": [
{
"action": "ACTION",
"actionCondition": {
"exitCodes": [EXIT_CODES]
}
}
]
}
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Ganti kode berikut:
PROJECT_ID
: Project ID project Anda.LOCATION
: lokasi tugas.JOB_NAME
: nama tugas.MAX_RETRY_COUNT
: jumlah maksimum percobaan ulang untuk setiap tugas. Agar tugas dapat dicoba ulang, nilai ini harus ditetapkan ke bilangan bulat antara1
dan10
. Jika kolommaxRetryCount
tidak ditentukan, nilai defaultnya adalah0
, yang berarti tidak mencoba kembali tugas apa pun.ACTION
: tindakan, baikRETRY_TASK
atauFAIL_TASK
, yang Anda inginkan untuk tugas yang gagal dengan kode keluar yang ditentukan. Tugas yang gagal dengan kode keluar yang tidak ditentukan akan melakukan tindakan lain.EXIT_CODES
: daftar yang dipisahkan koma dari satu atau beberapa kode keluar yang ingin Anda gunakan untuk memicu tindakan yang ditentukan—misalnya,50001, 50002
.Setiap kode keluar dapat ditentukan oleh aplikasi atau Batch Anda. Kode keluar dari
50001
hingga59999
disediakan oleh Batch. Untuk informasi selengkapnya tentang kode keluar yang dicadangkan, lihat Memecahkan masalah.
Misalnya, tugas berikut hanya mencoba kembali tugas yang gagal karena preemption Spot VM.
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "sleep 30"
}
}
],
"maxRetryCount": 3,
"lifecyclePolicies": [
{
"action": "RETRY_TASK",
"actionCondition": {
"exitCodes": [50001]
}
}
]
}
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"machineType": "e2-standard-4",
"provisioningModel": "SPOT"
}
}
]
}
}
Mengubah perilaku tugas berdasarkan jumlah percobaan ulang
Secara opsional, setelah mengaktifkan percobaan ulang otomatis untuk tugas seperti yang dijelaskan di bagian sebelumnya di halaman ini, Anda dapat mengupdate runnable untuk menggunakan variabel lingkungan yang telah ditentukan sebelumnya BATCH_TASK_RETRY_ATTEMPT
.
Variabel BATCH_TASK_RETRY_ATTEMPT
menjelaskan frekuensi
tugas ini telah dicoba. Gunakan
variabel BATCH_TASK_RETRY_ATTEMPT
dalam runnable jika Anda ingin
tugas berperilaku berbeda berdasarkan jumlah percobaan ulang.
Misalnya, saat tugas dicoba ulang, Anda mungkin ingin
mengonfirmasi perintah mana yang telah berhasil dieksekusi dalam
upaya sebelumnya. Untuk mengetahui informasi selengkapnya, lihat
Variabel lingkungan standar.
Langkah selanjutnya
- Jika Anda mengalami masalah saat membuat atau menjalankan tugas, lihat Pemecahan masalah.
- Lihat tugas dan pekerjaan.
- Pelajari opsi pembuatan tugas lainnya.