Criando e executando um trabalho que roda indefinidamente
Aprenda como criar e executar um trabalho Code Engine que pode executar indefinidamente e não tempo fora.
Geralmente, os empregos são projetados para executar uma única vez e sair com um tempo máximo de execução.
No entanto, suponhamos que você queira constantemente pesquisar uma loja de dados de terceiros. Você pode optar por criar um aplicativo; no entanto, a porta do aplicativo deve permanecer aberta para lidar com as solicitações do HTTP. Em vez disso, se você não quiser atender às solicitações do site HTTP, poderá optar por criar um trabalho que seja executado sem um tempo máximo de execução e que não atinja o tempo limite.
Com Code Engine, você pode escolher o modo de seu trabalho. Use o modo padrão task
para jobs onde se aplica um tempo máximo de execução. Para esses trabalhos, instâncias falhadas são reiniciadas por limite de novas tentativas de emprego.
Se você deseja criar um trabalho que pode executar indefinidamente e não tempo fora, use o modo daemon
para seus empregos. Com este modo, executa-se o job não tempo fora e quaisquer instâncias falhadas são automaticamente reiniciadas
indefinidamente.
Quando você usar o modo daemon
para executar tarefas, se desejar que o Code Engine reinicie automaticamente a tarefa se houver uma falha, certifique-se de que seu código seja interrompido com um código de saída diferente de zero.
Se a imagem de contêiner associada à sua tarefa do daemon terminar com um código de saída 0
, o Code Engine assumirá que a tarefa foi interrompida intencionalmente e a tarefa não será reiniciada. No entanto, se a tarefa falhar por
uma razão inesperada e a imagem de contêiner associada à sua tarefa do daemon sair com um código de saída diferente de zero, o Code Engine reiniciará automaticamente a tarefa do daemon. Consulte Por que minha tarefa do daemon não é reiniciada automaticamente?
Com Code Engine, você paga por apenas os recursos que você usa. Quando o seu job for executado no modo daemon
, esteja ciente de que o job está sempre em execução até que você exclua o job.
Criando e executando um job que roda indefinidamente a partir do console
Este exemplo usa o IBM Cloud Code Engine amostras; em particular, a amostra helloworld
. Quando você cria um job que referencia a amostra icr.io/codeengine/helloworld
,
e você também especifica o modo como daemon
, este job executa sem um tempo máximo de execução e instâncias falhadas são reiniciadas indefinidamente. Se o modo não for especificado, por padrão, o job será executado no modo task
.
-
Crie seu trabalho
- Abra o console Code Engine.
- Selecione Vamos.
- Selecione Tarefa.
- Insira um nome para a tarefa, por exemplo,
myjob
. - Selecione um projeto na lista de projetos disponíveis. Também é possível criar um novo. Observe que deve-se ter um projeto selecionado para criar uma tarefa.
- Escolha o código a ser executado. Você pode criar seu emprego a partir de uma imagem em um registro público, registro privado,
ou em IBM Cloud Container Registry. Você também pode criar o seu job a partir de repositório ou
local código fonte. Para este exemplo, use a imagem de amostra Code Engine,
icr.io/codeengine/helloworld
. - Na seção Recursos e ajuste de escala, especifique
daemon
para o modo nas Configurações de resiliência. Quando você especifica o mododaemon
, as execuções de tarefa para essa tarefa podem ser executadas indefinidamente e elas não têm tempo limite. Não há limite de nova tentativa para essas corridas de trabalho. Qualquer execução de tarefa para esses empregos é automaticamente reiniciada sem limite. - Clique em Criar para criar a tarefa.
-
Na página Tarefas, clique na guia Tarefas para visualizar uma lista de tarefas definidas Clique no nome de sua tarefa para abrir a configuração.
-
Execute a tarefa.
- Clique em Enviar tarefa para abrir o diálogo Enviar tarefa. Revise e, opcionalmente, mude os valores de configuração padrão, como instâncias, CPU, memória, número de novas tentativas de tarefa e tempo limite de tarefa. Para obter mais informações sobre essas opções, consulte Opções para criar e executar uma tarefa.
- Clique em Enviar tarefa para executá-la. O sistema exibe o status das instâncias de sua tarefa na página de detalhes da tarefa. Se alguma das instâncias de sua tarefa não tiver sido executada, essas instâncias serão automaticamente rejulgadas indefinidamente.
Para solucionar erros comuns de índice de execução de trabalho, consulte Entendendo por que os índices de execução de trabalho podem falhar.
-
(opcional) Visualizar logs da execução do job. No console, é possível visualizar os logs de trabalho do console para as execuções de trabalho. Observe na saída de log para a amostra
helloworld
, que a variável de ambienteJOB_MODE
exibe o modo de tarefa.
Criando e executando um job que roda indefinidamente com a CLI
Antes de Iniciar
- Configure o seu ambiente da CLI do Code Engine.
- Criar e trabalhar com um projeto.
Este exemplo usa o IBM Cloud Code Engine amostras; em particular, a amostra helloworld
. Quando você cria um job que referencia a amostra icr.io/codeengine/helloworld
,
e você também especifica --mode daemon
, este job corre sem um tempo máximo de execução e as instâncias falhadas são reiniciadas indefinidamente. Se o modo não for especificado, por padrão, o job será executado no modo task
.
-
Crie a tarefa
myjob-daemon
, que usa a imagem de amostraicr.io/codeengine/helloworld
. Para executar esta imagem de amostra como um job no mododaemon
, especifique--mode daemon
.ibmcloud ce job create --name myjob-daemon --image icr.io/codeengine/helloworld --mode daemon
Saída de exemplo
Creating job 'myjob-daemon'...
A tabela a seguir resume as opções que são usadas com o comando
job create
neste exemplo. Consulte o comandoibmcloud ce job create
para obter mais informações sobre ele e as opções que ele oferece.Descrição do comando Opção Descrição --name
O nome da tarefa. Use um nome que seja exclusivo dentro do projeto. Esse valor é necessário.
- O nome deve começar e terminar com um caractere alfanumérico minúscula.
- O nome deve ter 63 caracteres ou menos e pode conter letras, números e hifens (-).
--image
O nome da imagem que é usada para execuções da tarefa. --mode
O modo para execuções da tarefa. Os valores válidos são task
(padrão) edaemon
. No mododaemon
, não há valor de tempo limite e instâncias falhadas são reiniciadas indefinidamente. -
(opcional) Use o comando
job get
para exibir informações sobre o seu trabalho.ibmcloud ce job get --name myjob-daemon
Saída de exemplo
[...] 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 [...]
-
Execute sua tarefa. Este comando de exemplo executa a execução de tarefa
myjobrun-daemon
que é baseada na configuração de tarefamyjob-daemon
.ibmcloud ce jobrun submit --name myjobrun-daemon --job myjob-daemon
-
(opcional) Visualize os detalhes da execução de tarefa.
ibmcloud ce jobrun get --name myjobrun-daemon
Saída de exemplo
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
-
(opcional) Visualizar logs para a execução de tarefas. Com o CLI, é possível visualizar logs de tarefas para todas as instâncias de uma execução de tarefa ou para uma determinada instância de execução de tarefas. O exemplo a seguir exibe logs de tarefas para todas as instâncias da execução de job
myjobrun-daemon
.ibmcloud ce jobrun logs --name myjobrun-daemon
Saída de exemplo
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
Agora que seu trabalho é criado no modo daemon
, o trabalho é executado indefinidamente. Como não há tempo limite e as instâncias falhadas são reiniciadas indefinidamente, as opções --maxexecutiontime
e --retrylimit
não são permitidas quando você executa uma tarefa no modo daemon
.
Percebem que a variável de ambiente JOB_MODE
exibe o modo de execução da tarefa.
Parar um trabalho que roda indefinidamente
Quando você executa um trabalho no modo daemon
, ele pode ser executado indefinidamente, uma vez que ele é executado sem um tempo máximo de execução e quaisquer instâncias falidas são automaticamente rejulgadas indefinidamente. Para
parar um trabalho que esteja no modo daemon
, exclua a execução de tarefa específica ou exclua o job.
Como parar um trabalho que é executado indefinidamente a partir do console
-
Para excluir uma execução de tarefa específica, vá para a página de trabalho para o seu trabalho específico. Vá até a aba Job runs. Exclua a execução de trabalho que você deseja remover.
-
Para excluir um trabalho, vá para a página Jobs, clique no nome do job que deseja remover. A exclusão de um job exclui o job, sua configuração e qualquer tarefa de execução associada ao cargo.
Parando um trabalho que roda indefinidamente com a CLI
-
Para excluir uma execução de tarefa específica com a CLI, use o comando
jobrun delete
. Opcionalmente, você pode usar a opção-f
para forçar a exclusão de um trabalho executado sem confirmação.ibmcloud ce jobrun delete --name myjobrun-daemon -f
Saída de exemplo
Deleting job run 'myjobrun-daemon'... OK
-
Para excluir um trabalho com a CLI, use o comando
job delete
. Opcionalmente, você pode usar a opção-f
para forçar a exclusão de um trabalho sem confirmação. Quando você exclui um emprego, qualquer tarefa executada para este trabalho também é excluída. O exemplo a seguir exclui o jobmyjob-daemon
,ibmcloud ce job delete --name myjob-daemon -f
Saída de exemplo
Deleting job 'myjob-daemon'... OK