IBM Cloud Docs
無期限に実行されるジョブの作成と実行

無期限に実行されるジョブの作成と実行

無期限に実行でき、タイムアウトにならない 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 モードで実行されます。

  1. ジョブの作成

    1. Code Engine コンソールを開きます。
    2. 「始めましょう」 を選択します。
    3. **「ジョブ」**を選択します。
    4. ジョブの名前を入力します (例: myjob)。
    5. 選択可能なプロジェクトのリストからプロジェクトを選択します。 新規作成することもできます。 ジョブを作成するには、選択したプロジェクトがなければならないことに注意してください。
    6. 実行するコードを選択します。 パブリック・レジストリープライベート・レジストリー、または IBM Cloud Container Registry 内のイメージからジョブを作成できます。 リポジトリー または ローカル ・ソース・コードからジョブを作成することもできます。 この例では、 Code Engine のサンプル・イメージ icr.io/codeengine/helloworld を使用します。
    7. 「リソース」&「スケーリング」 セクションで、 「回復力の設定」 でモードに daemon を指定します。 daemon モードを指定すると、このジョブのジョブ実行は無期限に実行される可能性があり、タイムアウトにはなりません。 これらのジョブ実行には再試行の制限はありません。 これらのジョブのジョブ実行は、制限なしに自動的に再始動されます。
    8. **「作成」**をクリックして、ジョブを作成します。
  2. 「ジョブ」 ページで、 「ジョブ」 タブをクリックして、定義済みジョブのリストを表示します。 ジョブの名前をクリックして、その構成を開きます。

  3. ジョブを実行します。

    1. **「ジョブの実行依頼」**をクリックして、「ジョブの実行依頼」ダイアログを開きます。 インスタンス、CPU、メモリー、ジョブ再試行回数、ジョブ・タイムアウトなどのデフォルト構成値を確認し、必要に応じて変更します。 これらのオプションについて詳しくは、ジョブを作成および実行する際のオプションを参照してください。
    2. **「ジョブの実行依頼」**をクリックしてジョブを実行します。 「ジョブの詳細 (job details)」ページに、ジョブのインスタンスの状況が表示されます。 ジョブのいずれかのインスタンスが実行に失敗した場合、これらのインスタンスは無期限に自動的に再試行されます。
  4. (オプション) ジョブ実行のログを表示します。 コンソールから、ジョブ実行の ジョブ・ログを表示 できます。 helloworld サンプルのログ出力で、 JOB_MODE 環境変数はジョブのモードを表示することに注意してください。

CLI を使用して無期限に実行されるジョブの作成および実行

開始前に

この例では、 IBM Cloud Code Engine サンプル、特に helloworld サンプルを使用します。 icr.io/codeengine/helloworld サンプルを参照するジョブを作成し、さらに --mode daemon を指定すると、このジョブは最大実行時間なしで実行され、失敗したインスタンスは無期限に再始動されます。 モードが指定されていない場合、デフォルトでは、ジョブは task モードで実行されます。

  1. サンプル・イメージ 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 モードでは、タイムアウト値はなく、失敗したインスタンスは無期限に再始動されます。
  2. (オプション) 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
    [...]
    
  3. ジョブを実行します。 このコマンド例は、 myjob-daemon ジョブ構成に基づいて myjobrun-daemon ジョブ実行を実行します。

    ibmcloud ce jobrun submit --name myjobrun-daemon --job myjob-daemon
    
  4. (オプション) ジョブ実行の詳細を表示します。

    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
    
  5. (オプション) ジョブ実行のログを表示します。 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