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 tidak akan dicoba lagi. Namun, beberapa masalah yang menyebabkan tugas gagal dapat dengan mudah diselesaikan hanya dengan mencoba kembali tugas tersebut. Dalam kasus ini, mengonfigurasi tugas untuk mencoba kembali tugas secara otomatis dapat sangat membantu mengurangi hambatan pemecahan masalah dan waktu berjalannya tugas secara keseluruhan.
Percobaan ulang otomatis sangat cocok untuk tugas-tugas yang dikaitkan secara 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 dicoba lagi jika gagal.
- Coba lagi tugas untuk semua kegagalan: Anda dapat mengonfigurasi waktu maksimum untuk mencoba kembali tugas yang gagal secara otomatis. Anda dapat menentukan antara 0 (default) dan 10 percobaan ulang.
- Mencoba ulang tugas untuk beberapa kegagalan: Anda dapat mengonfigurasi tindakan tugas yang berbeda—percobaan ulang otomatis atau gagal tanpa percobaan ulang—untuk kegagalan tertentu. Tindakan yang berlawanan akan dilakukan untuk semua kegagalan yang tidak ditentukan. Kegagalan tertentu masing-masing dapat diidentifikasi melalui 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
) pada project -
Service Account User (
roles/iam.serviceAccountUser
) pada akun layanan tugas, yang secara default adalah akun layanan Compute Engine default
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
-
Batch Job Editor (
Coba lagi tugas untuk semua kegagalan
Anda dapat menentukan jumlah maksimum percobaan ulang otomatis (kolom maxRetryCount
) untuk tugas yang gagal pada 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 percobaan ulang maksimum untuk setiap tugas. Agar tugas dapat mencoba kembali tugas yang gagal, nilai ini harus disetel ke bilangan bulat antara1
dan10
. Jika kolommaxRetryCount
tidak ditentukan, nilai defaultnya adalah0
, yang berarti tidak mencoba lagi 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 pekerjaan.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 pekerjaan.MAX_RETRY_COUNT
: Jumlah maksimum percobaan ulang untuk setiap tugas. Agar tugas dapat mencoba kembali tugas yang gagal, nilai ini harus disetel ke bilangan bulat antara1
dan10
. Jika kolommaxRetryCount
tidak ditentukan, nilai defaultnya adalah0
, yang berarti tidak mencoba lagi tugas apa pun.
Coba lagi tugas untuk beberapa kegagalan
Anda dapat menentukan cara tugas menangani berbagai kegagalan tugas 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 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 exit code yang tidak ditentukan tidak akan dicoba ulang.FAIL_TASK
: jangan mencoba lagi tugas yang gagal dengan kode keluar yang ditentukan di kolomexitCodes[]
. Tugas yang gagal dengan kode keluar yang tidak ditentukan akan dicoba ulang.
Secara khusus, tugas apa pun yang gagal dengan exit code yang tidak ditentukan akan mengambil
tindakan yang berlawanan—beberapa exit code dicoba ulang, dan beberapa lainnya gagal.
Dengan demikian, agar kebijakan siklus proses berfungsi seperti yang diharapkan,
Anda juga perlu menentukan
jumlah maksimum percobaan ulang otomatis (kolom maxRetryCount
)
agar tugas dapat otomatis mencoba kembali tugas yang gagal minimal sekali.
Setiap kode keluar mewakili kegagalan tertentu yang ditentukan oleh aplikasi Anda atau Batch. Kode keluar dari 50001 hingga 59999 dicadangkan dan ditentukan oleh Batch. Untuk mengetahui informasi selengkapnya tentang kode keluar yang dipesan, lihat Pemecahan masalah.
Anda dapat menentukan tugas untuk mencoba ulang atau menggagalkan tugas 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 ulang tugas yang gagal hanya untuk beberapa exit code, 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 mencoba kembali tugas yang gagal, nilai ini harus disetel ke bilangan bulat antara1
dan10
. Jika kolommaxRetryCount
tidak ditentukan, nilai defaultnya adalah0
, yang berarti tidak mencoba lagi tugas apa pun.ACTION
: tindakan, baikRETRY_TASK
maupunFAIL_TASK
, yang Anda inginkan untuk tugas yang gagal dengan kode keluar yang ditentukan. Tugas yang gagal dengan kode keluar yang tidak ditentukan akan mengambil tindakan lainnya.EXIT_CODES
: daftar yang dipisahkan koma yang berisi satu atau beberapa exit code yang Anda inginkan untuk memicu tindakan yang ditentukan—misalnya,50001, 50002
.Setiap exit code dapat ditentukan oleh aplikasi atau Batch Anda. Kode keluar dari
50001
hingga59999
dicadangkan oleh Batch. Untuk mengetahui informasi selengkapnya tentang kode keluar yang dipesan, lihat Pemecahan masalah.
Misalnya, tugas berikut hanya mencoba ulang tugas yang gagal karena preemption VM Spot.
{ "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 pekerjaan.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 exit code, 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 pekerjaan.MAX_RETRY_COUNT
: jumlah maksimum percobaan ulang untuk setiap tugas. Agar tugas dapat mencoba kembali tugas yang gagal, nilai ini harus disetel ke bilangan bulat antara1
dan10
. Jika kolommaxRetryCount
tidak ditentukan, nilai defaultnya adalah0
, yang berarti tidak mencoba lagi tugas apa pun.ACTION
: tindakan, baikRETRY_TASK
maupunFAIL_TASK
, yang Anda inginkan untuk tugas yang gagal dengan kode keluar yang ditentukan. Tugas yang gagal dengan kode keluar yang tidak ditentukan akan mengambil tindakan lainnya.EXIT_CODES
: daftar yang dipisahkan koma yang berisi satu atau beberapa exit code yang Anda inginkan untuk memicu tindakan yang ditentukan—misalnya,50001, 50002
.Setiap exit code dapat ditentukan oleh aplikasi atau Batch Anda. Kode keluar dari
50001
hingga59999
dicadangkan oleh Batch. Untuk mengetahui informasi selengkapnya tentang kode keluar yang dipesan, lihat Pemecahan masalah.
Misalnya, tugas berikut hanya mencoba ulang tugas yang gagal karena preemption VM Spot.
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"
}
}
]
}
}
Langkah selanjutnya
- Jika Anda mengalami masalah saat membuat atau menjalankan tugas, lihat Pemecahan masalah.
- Melihat tugas dan tugas.
- Pelajari opsi pembuatan lowongan lebih lanjut.