무한정 실행되는 작업 작성 및 실행

시간 제한 없이 무기한으로 실행될 수 있는 ‘ Code Engine ’ 작업을 생성하고 실행하는 방법을 알아보세요.

일반적으로 작업은 한 번 실행하고 최대 실행 시간으로 종료하도록 설계되었습니다.

그러나 써드파티 데이터 저장소를 지속적으로 폴링하려 한다고 가정하십시오. 애플리케이션을 만들도록 선택할 수 있지만, 앱 포트는 HTTP 요청을 처리하기 위해 열려 있어야 합니다. HTTP 요청을 처리하지 않으려면 최대 실행 시간이 없고 시간 초과되지 않는 작업을 생성할 수 있습니다.

Code Engine를 사용하여 작업 모드를 선택할 수 있습니다. 최대 실행 시간이 적용되는 작업에는 기본 task 모드를 사용하십시오. 이러한 작업의 경우 실패한 인스턴스는 작업 재시도 한계에 따라 다시 시작됩니다.

무한정 실행할 수 있고 제한시간이 초과되지 않는 작업을 작성하려면 작업에 daemon 모드를 사용하십시오. 이 모드를 사용하면 작업 실행이 제한시간 초과되지 않으며 실패한 인스턴스가 자동으로 무한정 다시 시작됩니다.

daemon 모드를 사용하여 작업을 실행할 때 장애가 있는 경우 Code Engine 가 자동으로 작업을 다시 시작하도록 하려면 0이 아닌 종료 코드로 코드가 중지되는지 확인하십시오. 디먼 작업과 연관된 컨테이너 이미지가 0 종료 코드로 종료되면 Code Engine 는 작업이 의도적으로 중지되었으며 작업이 다시 시작되지 않았다고 가정합니다. 그러나 예기치 않은 이유로 작업이 실패하고 디먼 작업과 연관된 컨테이너 이미지가 0이 아닌 종료 코드로 종료되면 Code Engine 가 디먼 작업을 자동으로 다시 시작합니다. 내 디먼 작업이 자동으로 다시 시작되지 않는 이유 를 참조하십시오.

Code Engine 를 사용하면 실제로 사용한 리소스에 대해서만 요금을 지불하면 됩니다. 작업이 daemon 모드에서 실행되는 경우 작업을 삭제할 때까지 작업이 항상 실행 중이라는 점에 유의하십시오.

콘솔에서 무한정 실행되는 작업 작성 및 실행

이 예제에서는 ‘ IBM Cloud Code Engine ’ 샘플, 특히 ‘ helloworld ’ 샘플을 사용합니다. icr.io/codeengine/helloworld 샘플을 참조하는 작업을 작성하고 모드를 daemon 로 지정하는 경우, 이 작업은 최대 실행 시간 없이 실행되며 실패한 인스턴스는 무기한으로 다시 시작됩니다. 모드가 지정되지 않은 경우 기본적으로 작업은 task 모드에서 실행됩니다.

  1. 작업 작성

    1. Code Engine 콘솔을 여십시오.
    2. '만들기 시작'을 선택하세요.
    3. 사용 가능한 프로젝트 목록에서 프로젝트를 선택하십시오. 프로젝트를 새로 작성할 수도 있습니다. 작업을 작성하려면 선택한 프로젝트가 있어야 합니다.
    4. 작업을 선택하십시오.
    5. 작업의 이름을 입력하십시오(예: myjob).
    6. 실행할 코드를 선택하십시오. 공용 레지스트리, 개인용 레지스트리 또는 IBM Cloud Container Registry 의 이미지에서 작업을 작성할 수 있습니다. 저장소 또는 로컬 소스 코드에서 작업을 작성할 수도 있습니다. 이 예의 경우 Code Engine 샘플 이미지, icr.io/codeengine/helloworld 를 사용하십시오.
    7. 자원 및 스케일링 섹션에서 복원 설정의 모드에 대해 daemon 를 지정하십시오. daemon 모드를 지정하면 이 작업에 대한 작업 실행이 무한정 실행될 수 있으며 제한시간이 초과되지 않습니다. 이러한 작업 실행에 대한 재시도 한계가 없습니다. 이러한 작업에 대한 모든 작업 실행은 제한 없이 자동으로 다시 시작됩니다.
    8. 작성을 클릭하여 작업을 작성하십시오.
  2. 작업 페이지에서 작업 탭을 클릭하여 정의된 작업 목록을 보십시오. 작업 이름을 클릭하여 구성을 여십시오.

  3. 작업을 실행하십시오.

    1. 작업 제출을 클릭하여 작업 제출 대화 상자를 여십시오. 인스턴스, CPU, 메모리, 작업 재시도 횟수, 작업 제한시간과 같은 기본 구성 값을 검토하고 선택적으로 변경하십시오. 이러한 옵션에 대한 자세한 정보는 작업 작성 및 실행 옵션을 참조하십시오.
    2. 작업 제출을 클릭하여 작업을 실행하십시오. 작업 인스턴스의 상태가 작업 세부사항 페이지에 표시됩니다. 작업의 인스턴스 중 실행에 실패한 인스턴스가 있는 경우 이러한 인스턴스는 자동으로 무한정 재시도됩니다.

    일반적인 작업 실행 인덱스 오류를 해결하려면 “작업 실행 인덱스가 실패하는 이유 이해”를 참조하십시오.

  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 명령을 참조하십시오.

    명령 설명
    옵션 설명
    --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