無期限に実行されるジョブの作成と実行
無期限に実行でき、タイムアウトにならない Code Engine ジョブを作成して実行する方法について説明します。
通常、ジョブは 1 回実行し、最大実行時間で終了するように設計されています。
ただし、サード・パーティー・データ・ストアを常にポーリングする必要があるとします。 アプリケーションの作成を選択できますが、アプリケーション・ポートは、 HTTP 要求を処理するために開いたままにしておく必要があります。 代わりに、 HTTP 要求を処理したくない場合は、最大実行時間なしで実行され、タイムアウトにならないジョブを作成することを選択できます。
Code Engineで、ジョブのモードを選択できます。 最大実行時間が適用されるジョブには、デフォルトの task
モードを使用します。 これらのジョブの場合、失敗したインスタンスは、ジョブ再試行限度に従って再始動されます。
無期限に実行でき、タイムアウトにならないジョブを作成する場合は、ジョブに daemon
モードを使用します。 このモードでは、ジョブの実行はタイムアウトにならず、失敗したインスタンスは自動的に無期限に再始動されます。
daemon
モードを使用してジョブを実行するときに、障害が発生した場合に Code Engine が自動的にジョブを再始動するようにするには、コードがゼロ以外の終了コードで停止するようにします。 デーモン・ジョブに関連付けられているコンテナー・イメージが 0
終了コードで終了した場合、 Code Engine は、ジョブが意図的に停止されたものと想定し、ジョブは再始動されません。 ただし、予期しない理由でジョブが失敗し、デーモン・ジョブに関連付けられたコンテナー・イメージがゼロ以外の終了コードで終了した場合、
Code Engine は自動的にデーモン・ジョブを再始動します。 デーモン・ジョブが自動的に再始動しないのはなぜですか? を参照してください。
Code Engineでは、使用したリソースに対してのみ支払います。 ジョブが daemon
モードで実行される場合、ジョブを削除するまでジョブは常に実行されていることに注意してください。
コンソールから無期限に実行されるジョブの作成および実行
この例では、 IBM Cloud Code Engine サンプル、特に helloworld
サンプルを使用します。 icr.io/codeengine/helloworld
サンプルを参照するジョブを作成し、モードを daemon
と指定すると、このジョブは最大実行時間なしで実行され、失敗したインスタンスは無期限に再始動されます。
モードが指定されていない場合、デフォルトでは、ジョブは task
モードで実行されます。
-
ジョブの作成
- Code Engine コンソールを開きます。
- 「始めましょう」 を選択します。
- **「ジョブ」**を選択します。
- ジョブの名前を入力します (例:
myjob
)。 - 選択可能なプロジェクトのリストからプロジェクトを選択します。 新規作成することもできます。 ジョブを作成するには、選択したプロジェクトがなければならないことに注意してください。
- 実行するコードを選択します。 パブリック・レジストリー、 プライベート・レジストリー、または IBM Cloud Container Registry 内のイメージからジョブを作成できます。 リポジトリー または ローカル ・ソース・コードからジョブを作成することもできます。 この例では、 Code Engine のサンプル・イメージ
icr.io/codeengine/helloworld
を使用します。 - 「リソース」&「スケーリング」 セクションで、 「回復力の設定」 でモードに
daemon
を指定します。daemon
モードを指定すると、このジョブのジョブ実行は無期限に実行される可能性があり、タイムアウトにはなりません。 これらのジョブ実行には再試行の制限はありません。 これらのジョブのジョブ実行は、制限なしに自動的に再始動されます。 - **「作成」**をクリックして、ジョブを作成します。
-
「ジョブ」 ページで、 「ジョブ」 タブをクリックして、定義済みジョブのリストを表示します。 ジョブの名前をクリックして、その構成を開きます。
-
ジョブを実行します。
- **「ジョブの実行依頼」**をクリックして、「ジョブの実行依頼」ダイアログを開きます。 インスタンス、CPU、メモリー、ジョブ再試行回数、ジョブ・タイムアウトなどのデフォルト構成値を確認し、必要に応じて変更します。 これらのオプションについて詳しくは、ジョブを作成および実行する際のオプションを参照してください。
- **「ジョブの実行依頼」**をクリックしてジョブを実行します。 「ジョブの詳細 (job details)」ページに、ジョブのインスタンスの状況が表示されます。 ジョブのいずれかのインスタンスが実行に失敗した場合、これらのインスタンスは無期限に自動的に再試行されます。
-
(オプション) ジョブ実行のログを表示します。 コンソールから、ジョブ実行の ジョブ・ログを表示 できます。
helloworld
サンプルのログ出力で、JOB_MODE
環境変数はジョブのモードを表示することに注意してください。
CLI を使用して無期限に実行されるジョブの作成および実行
開始前に
- Code Engine の CLI 環境をセットアップします。
- プロジェクトを作成して使用できるようにします。
この例では、 IBM Cloud Code Engine サンプル、特に helloworld
サンプルを使用します。 icr.io/codeengine/helloworld
サンプルを参照するジョブを作成し、さらに --mode daemon
を指定すると、このジョブは最大実行時間なしで実行され、失敗したインスタンスは無期限に再始動されます。 モードが指定されていない場合、デフォルトでは、ジョブは task
モードで実行されます。
-
サンプル・イメージ
icr.io/codeengine/helloworld
を使用するmyjob-daemon
ジョブを作成します。 このサンプル・イメージをdaemon
モードのジョブとして実行するには、--mode daemon
を指定します。ibmcloud ce job create --name myjob-daemon --image icr.io/codeengine/helloworld --mode daemon
出力例
Creating job 'myjob-daemon'...
以下の表は、この例の中で
job create
コマンドと共に使用されるオプションを要約しています。 コマンドとそのオプションについて詳しくは、ibmcloud ce job create
コマンドを参照してください。表 1. コマンドの説明 オプション 説明 --name
ジョブの名前。 プロジェクト内で固有の名前を使用します。 この値は必須です。
- 名前の先頭と末尾は小文字の英数字でなければなりません。
- 名前は 63 文字以下でなければならず、文字、数字、およびハイフン (-) を使用できます。
--image
ジョブの実行に使用するイメージの名前。 --mode
ジョブを実行するためのモード。 有効な値は、 task
(デフォルト) およびdaemon
です。daemon
モードでは、タイムアウト値はなく、失敗したインスタンスは無期限に再始動されます。 -
(オプション)
job get
コマンドを使用して、ジョブに関する情報を表示します。ibmcloud ce job get --name myjob-daemon
出力例
[...] Name: myjob-daemon ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 2d15h Created: 2022-04-14T16:10:11-04:00 Image: icr.io/codeengine/helloworld Resource Allocation: CPU: 1 Memory: 4G Runtime: Mode: daemon Array Indices: 0 Array Size: 1 Max Execution Time: 7200 Retry Limit: 3 [...]
-
ジョブを実行します。 このコマンド例は、
myjob-daemon
ジョブ構成に基づいてmyjobrun-daemon
ジョブ実行を実行します。ibmcloud ce jobrun submit --name myjobrun-daemon --job myjob-daemon
-
(オプション) ジョブ実行の詳細を表示します。
ibmcloud ce jobrun get --name myjobrun-daemon
出力例
Getting jobrun 'myjobrun-daemon'... Getting instances of jobrun 'myjobrun-daemon'... Getting events of jobrun 'myjobrun-daemon'... For troubleshooting information visit: https://cloud.ibm.com/docs/codeengine?topic=codeengine-troubleshoot-job. Run 'ibmcloud ce jobrun events -n myjobrun-daemon' to get the system events of the job run instances. Run 'ibmcloud ce jobrun logs -f -n myjobrun-daemon' to follow the logs of the job run instances. OK Name: myjobrun-daemon ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 2d15h Created: 2022-04-14T16:10:11-04:00 Job Ref: myjob-daemon Image: icr.io/codeengine/helloworld Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Runtime: Mode: daemon Array Indices: 0 Array Size: 1 JOP_ARRAY_SIZE Value: 1 Max Execution Time: 7200 Retry Limit: 3 Status: Instance Statuses: Running: 1 Conditions: Type Status Last Probe Last Transition Pending True 27s 27s Running True 4s 4s Events: Type Reason Age Source Messages Normal Updated 4s (x3 over 26s) batch-job-controller Updated JobRun "myjobrun-daemon" Instances: Name Running Status Restarts Age myjobrun-daemon-0-0 1/1 Running 0 26s
-
(オプション) ジョブ実行のログを表示します。 CLI を使用して、ジョブ実行のすべてのインスタンスまたは特定のジョブ実行インスタンスの ジョブ・ログを表示 できます。 以下の例では、
myjobrun-daemon
ジョブ実行のすべてのインスタンスのジョブ・ログを表示します。ibmcloud ce jobrun logs --name myjobrun-daemon
出力例
Getting logs for all instances of job run 'myjobrun-daemon'... Getting jobrun 'myjobrun-daemon'... Getting instances of jobrun 'myjobrun-daemon'... OK myjobrun-daemon-0-0/myjob-daemon: Hello from helloworld! I'm a batch job! Index: 0 Hello World from: . ___ __ ____ ____ ./ __)/ \( \( __) ( (__( O )) D ( ) _) .\___)\__/(____/(____) .____ __ _ ___ __ __ _ ____ ( __)( ( \ / __)( )( ( \( __) .) _) / /( (_ \ )( / / ) _) (____)\_)__) \___/(__)\_)__)(____) Some Env Vars: -------------- CE_DOMAIN=us-south.codeengine.appdomain.cloud CE_JOB=myjob-daemon CE_JOBRUN=myjobrun-daemon CE_SUBDOMAIN=glxo4k7nj7d HOME=/root HOSTNAME=myjobrun-daemon-0-0 JOB_INDEX=0 JOB_MODE=daemon KUBERNETES_PORT=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443 KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1 KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_SERVICE_HOST=172.21.0.1 KUBERNETES_SERVICE_PORT=443 KUBERNETES_SERVICE_PORT_HTTPS=443 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ SHLVL=1 z=Set env var 'SHOW' to see all variables
ジョブが daemon
モードで作成されたので、ジョブは無期限に実行されます。 タイムアウトはなく、失敗したインスタンスは無期限に再始動されるため、 daemon
モードでジョブを実行する場合、 --maxexecutiontime
オプションと --retrylimit
オプションは許可されません。
JOB_MODE
環境変数は、ジョブの実行のモードを表示することに注意してください。
無期限に実行されるジョブの停止
daemon
モードでジョブを実行すると、最大実行時間なしで実行され、失敗したインスタンスは自動的に無期限に再試行されるため、無期限に実行できます。 daemon
モードのジョブを停止するには、特定のジョブ実行を削除するか、ジョブを削除します。
コンソールから無期限に実行されるジョブの停止
-
特定のジョブ実行を削除するには、特定のジョブのジョブ・ページに移動します。 「ジョブ実行」 タブに移動します。 削除するジョブ実行を削除します。
-
ジョブを削除するには、「ジョブ」ページに移動し、削除するジョブの名前をクリックします。 ジョブを削除すると、そのジョブとその構成、およびそのジョブに関連付けられているすべてのジョブ実行が削除されます。
CLI で無期限に実行されるジョブの停止
-
CLI で特定のジョブ実行を削除するには、
jobrun delete
コマンドを使用します。 オプションで、-f
オプションを使用して、確認を求めずにジョブ実行を強制的に削除することができます。ibmcloud ce jobrun delete --name myjobrun-daemon -f
出力例
Deleting job run 'myjobrun-daemon'... OK
-
CLI でジョブを削除するには、
job delete
コマンドを使用します。 オプションで、-f
オプションを使用して、確認を求めずにジョブを強制的に削除することができます。 ジョブを削除すると、そのジョブのすべてのジョブ実行も削除されます。 以下の例では、myjob-daemon
ジョブを削除します。ibmcloud ce job delete --name myjob-daemon -f
出力例
Deleting job 'myjob-daemon'... OK