무한정 실행되는 작업 작성 및 실행
시간 제한 없이 무기한으로 실행될 수 있는 ‘ 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 모드에서 실행됩니다.
-
작업 작성
- Code Engine 콘솔을 여십시오.
- '만들기 시작'을 선택하세요.
- 사용 가능한 프로젝트 목록에서 프로젝트를 선택하십시오. 프로젝트를 새로 작성할 수도 있습니다. 작업을 작성하려면 선택한 프로젝트가 있어야 합니다.
- 작업을 선택하십시오.
- 작업의 이름을 입력하십시오(예:
myjob). - 실행할 코드를 선택하십시오. 공용 레지스트리, 개인용 레지스트리 또는 IBM Cloud Container Registry 의 이미지에서 작업을 작성할 수 있습니다. 저장소 또는 로컬 소스 코드에서 작업을 작성할 수도 있습니다. 이 예의 경우 Code Engine 샘플 이미지,
icr.io/codeengine/helloworld를 사용하십시오. - 자원 및 스케일링 섹션에서 복원 설정의 모드에 대해
daemon를 지정하십시오.daemon모드를 지정하면 이 작업에 대한 작업 실행이 무한정 실행될 수 있으며 제한시간이 초과되지 않습니다. 이러한 작업 실행에 대한 재시도 한계가 없습니다. 이러한 작업에 대한 모든 작업 실행은 제한 없이 자동으로 다시 시작됩니다. - 작성을 클릭하여 작업을 작성하십시오.
-
작업 페이지에서 작업 탭을 클릭하여 정의된 작업 목록을 보십시오. 작업 이름을 클릭하여 구성을 여십시오.
-
작업을 실행하십시오.
- 작업 제출을 클릭하여 작업 제출 대화 상자를 여십시오. 인스턴스, CPU, 메모리, 작업 재시도 횟수, 작업 제한시간과 같은 기본 구성 값을 검토하고 선택적으로 변경하십시오. 이러한 옵션에 대한 자세한 정보는 작업 작성 및 실행 옵션을 참조하십시오.
- 작업 제출을 클릭하여 작업을 실행하십시오. 작업 인스턴스의 상태가 작업 세부사항 페이지에 표시됩니다. 작업의 인스턴스 중 실행에 실패한 인스턴스가 있는 경우 이러한 인스턴스는 자동으로 무한정 재시도됩니다.
일반적인 작업 실행 인덱스 오류를 해결하려면 “작업 실행 인덱스가 실패하는 이유 이해”를 참조하십시오.
-
(선택사항) 작업 실행의 로그를 보십시오. 콘솔에서 작업 실행에 대한 작업 로그를 콘솔에서 볼 수 있습니다.
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명령을 참조하십시오.명령 설명 옵션 설명 --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