IBM Cloud Docs
Criando e executando um trabalho que roda indefinidamente

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.

  1. Crie seu trabalho

    1. Abra o console Code Engine.
    2. Selecione Vamos.
    3. Selecione Tarefa.
    4. Insira um nome para a tarefa, por exemplo, myjob.
    5. 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.
    6. 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.
    7. Na seção Recursos e ajuste de escala, especifique daemon para o modo nas Configurações de resiliência. Quando você especifica o modo daemon, 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.
    8. Clique em Criar para criar a tarefa.
  2. 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.

  3. Execute a tarefa.

    1. 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.
    2. 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.

  4. (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 ambiente JOB_MODE exibe o modo de tarefa.

Criando e executando um job que roda indefinidamente com a CLI

Antes de Iniciar

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.

  1. Crie a tarefa myjob-daemon, que usa a imagem de amostra icr.io/codeengine/helloworld. Para executar esta imagem de amostra como um job no modo daemon, 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 comando ibmcloud 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) e daemon. No modo daemon, não há valor de tempo limite e instâncias falhadas são reiniciadas indefinidamente.
  2. (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
    [...]
    
  3. Execute sua tarefa. Este comando de exemplo executa a execução de tarefa myjobrun-daemon que é baseada na configuração de tarefa myjob-daemon.

    ibmcloud ce jobrun submit --name myjobrun-daemon --job myjob-daemon
    
  4. (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
    
  5. (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 job myjob-daemon,

    ibmcloud ce job delete --name myjob-daemon -f
    

    Saída de exemplo

    Deleting job 'myjob-daemon'...
    OK