Creazione ed esecuzione di un lavoro che viene eseguito indefinitamente

Scopri come creare ed eseguire un processo Code Engine in grado di funzionare a tempo indeterminato e senza limiti di tempo.

In genere, i lavori sono progettati per essere eseguiti una sola volta e per uscire con un tempo di esecuzione massimo.

Tuttavia, si supponga di voler eseguire costantemente il polling di un archivio dati di terzi. Si può scegliere di creare un'applicazione; tuttavia, la porta dell'applicazione deve rimanere aperta per gestire le richieste di HTTP. Invece, se non si desidera servire le richieste di HTTP, si può scegliere di creare un lavoro che viene eseguito senza un tempo massimo di esecuzione e non va in timeout.

Con Code Engine, puoi selezionare la modalità del lavoro. Utilizzare la modalità task predefinita per i lavori in cui si applica un tempo di esecuzione massimo. Per questi lavori, le istanze non riuscite vengono riavviate in base al limite di tentativi del lavoro.

Se si desidera creare un lavoro che può essere eseguito indefinitamente e non va in timeout, utilizzare la modalità daemon per i lavori. Con questa modalità, le esecuzioni del lavoro non vanno in timeout e tutte le istanze non riuscite vengono riavviate automaticamente a tempo indeterminato.

Quando si utilizza la modalità daemon per eseguire i lavori, se si desidera che Code Engine riavvii automaticamente il lavoro in caso di errore, assicurarsi che il codice si arresti con un codice di uscita diverso da zero. Se l'immagine del contenitore associata al tuo lavoro daemon termina con un codice di uscita 0, Code Engine presuppone che il lavoro sia stato arrestato intenzionalmente e che il lavoro non venga riavviato. Tuttavia, se il lavoro ha esito negativo per un motivo imprevisto e l'immagine del contenitore associata al tuo lavoro daemon termina con un codice di uscita diverso da zero, Code Engine riavvia automaticamente il lavoro daemon. Vedi Perché il mio lavoro daemon non si riavvia automaticamente?

Con Code Engine, paghi solo le risorse che utilizzi. Quando il lavoro viene eseguito in modalità daemon, tenere presente che il lavoro è sempre in esecuzione finché non si elimina il lavoro.

Creazione ed esecuzione di un lavoro che viene eseguito indefinitamente dalla console

Questo esempio utilizza gli esempi disponibili su IBM Cloud Code Engine; in particolare, l'esempio helloworld. Quando si crea un lavoro che fa riferimento all'esempio icr.io/codeengine/helloworld e si specifica anche la modalità come daemon, questo lavoro viene eseguito senza un tempo di esecuzione massimo e le istanze non riuscite vengono riavviate in modo indefinito. Se la modalità non è specificata, per impostazione predefinita, il lavoro viene eseguito in modalità task.

  1. Crea il tuo lavoro

    1. Apri la console Code Engine.
    2. Seleziona " Inizia a creare ".
    3. Seleziona un progetto dall'elenco dei progetti disponibili. È anche possibile crearne uno nuovo. Per creare un job, è necessario disporre di un progetto selezionato.
    4. Selezionare Lavoro.
    5. Inserisci un nome per il processo; ad esempio, “ myjob ”.
    6. Scegliere il codice da eseguire. Puoi creare il tuo lavoro da un'immagine in un registro pubblico, registro privato o in IBM Cloud Container Registry. È anche possibile creare il proprio lavoro dal codice di origine repository o locale. Per questo esempio, utilizza l'immagine di esempio Code Engine icr.io/codeengine/helloworld.
    7. Nella sezione Risorse & ridimensionamento, specificare daemon per la modalità in Impostazioni di resilienza. Quando si specifica la modalità daemon, le esecuzioni del lavoro per questo lavoro possono essere eseguite indefinitamente e non vanno in timeout. Non esiste alcun limite di tentativi per queste esecuzioni di lavori. Qualsiasi lavoro eseguito per questi lavori viene riavviato automaticamente senza limite.
    8. Fare clic su Crea per creare il processo.
  2. Dalla pagina Lavori, fare clic sulla scheda Lavori per visualizzare un elenco di lavori definiti. Fare clic sul nome del lavoro per aprire la configurazione.

  3. Eseguire il lavoro.

    1. Fare clic su Inoltra lavoro per aprire la finestra di dialogo Inoltra lavoro. Esaminare e facoltativamente modificare i valori di configurazione predefiniti come istanze, CPU, memoria, numero di tentativi del lavoro e timeout del lavoro. Per ulteriori informazioni su queste opzioni, consultare Opzioni per creare ed eseguire un lavoro.
    2. Fare clic su Inoltra lavoro per eseguire il lavoro. Il sistema visualizza lo stato delle istanze del lavoro nella pagina dei dettagli del lavoro. Se l'esecuzione di una delle istanze del lavoro non è riuscita, tali istanze vengono ritentate automaticamente per un periodo di tempo indefinito.

    Per risolvere gli errori comuni relativi agli indici di esecuzione dei lavori, consultare la sezione " Capire perché gli indici di esecuzione dei lavori possono fallire ".

  4. (facoltativo) Visualizzare i log dell'esecuzione del lavoro. Dalla console è possibile visualizzare i registri dei lavori eseguiti. Nell'output del log per l'esempio helloworld, la variabile di ambiente JOB_MODE visualizza la modalità del job.

Creazione ed esecuzione di un lavoro che viene eseguito indefinitamente con la CLI

Prima di iniziare

Questo esempio utilizza gli esempi disponibili su IBM Cloud Code Engine; in particolare, l'esempio helloworld. Quando si crea un job che fa riferimento all'esempio icr.io/codeengine/helloworld, e si specifica anche --mode daemon, questo job viene eseguito senza un tempo di esecuzione massimo e le istanze non riuscite vengono riavviate indefinitamente. Se la modalità non è specificata, per impostazione predefinita, il lavoro viene eseguito in modalità task.

  1. Creare il job myjob-daemon, che utilizza l'immagine di esempio icr.io/codeengine/helloworld. Per eseguire questa immagine di esempio come un job in modalità daemon, specificare --mode daemon.

    ibmcloud ce job create --name myjob-daemon --image icr.io/codeengine/helloworld --mode daemon
    

    Output di esempio

    Creating job 'myjob-daemon'...
    

    La seguente tabella riepiloga le opzioni utilizzate con il comando job create in questo esempio. Per ulteriori informazioni sul comando e le sue opzioni, consultare il comando ibmcloud ce job create.

    Descrizione del comando
    Opzione Descrizione
    --name

    Il nome del lavoro. Utilizzare un nome univoco all'interno del progetto. Questo valore è obbligatorio.

    • Il nome deve iniziare e terminare con un carattere alfanumerico minuscolo.
    • Il nome deve essere di 63 caratteri o meno e può contenere lettere, numeri e trattini (-).
    --image Il nome dell'immagine utilizzata per le esecuzioni del job.
    --mode La modalità per le esecuzioni del lavoro. I valori validi sono task (impostazione predefinita) e daemon. In modalità daemon, non c'è alcun valore di timeout e le istanze non riuscite vengono riavviate indefinitamente.
  2. (Facoltativo) Utilizzare il comando job get per visualizzare le informazioni sul lavoro.

    ibmcloud ce job get --name myjob-daemon
    

    Output di esempio

    [...]
    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. Esegui il tuo lavoro. Questo comando di esempio esegue l'esecuzione del lavoro myjobrun-daemon basato sulla configurazione del lavoro myjob-daemon.

    ibmcloud ce jobrun submit --name myjobrun-daemon --job myjob-daemon
    
  4. (facoltativo) Visualizzare i dettagli dell'esecuzione del lavoro.

    ibmcloud ce jobrun get --name myjobrun-daemon
    

    Output di esempio

    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. (Facoltativo) Visualizzare i log per l'esecuzione del lavoro. Con la CLI, puoi visualizzare i log del lavoro per tutte le istanze di un'esecuzione lavoro o per una particolare istanza di esecuzione lavoro. Il seguente esempio visualizza i log del lavoro per tutte le istanze dell'esecuzione del lavoro myjobrun-daemon.

    ibmcloud ce jobrun logs --name myjobrun-daemon
    

    Output di esempio

    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
    

Ora che il lavoro è stato creato in modalità daemon, il lavoro viene eseguito indefinitamente. Poiché non c'è alcun timeout e le istanze non riuscite vengono riavviate indefinitamente, le opzioni --maxexecutiontime e --retrylimit non sono consentite quando si esegue un lavoro in modalità daemon.

Notare che la variabile di ambiente JOB_MODE visualizza la modalità di esecuzione del lavoro.

Arresto di un lavoro che viene eseguito indefinitamente

Quando si esegue un lavoro in modalità daemon, può essere eseguito in modo indefinito, poiché viene eseguito senza un tempo di esecuzione massimo e le eventuali istanze non riuscite vengono riprovate automaticamente in modo indefinito. Per arrestare un lavoro in modalità daemon, eliminare l'esecuzione del lavoro specifico o eliminare il lavoro.

Arresto di un lavoro eseguito indefinitamente dalla console

  • Per eliminare una specifica esecuzione del lavoro, andare alla pagina del lavoro per il proprio lavoro specifico. Andare alla scheda Esecuzioni job. Elimina l'esecuzione del processo che desideri rimuovere.

  • Per eliminare un lavoro, andare alla pagina Lavori, fare clic sul nome del lavoro che si desidera rimuovere. L'eliminazione di un lavoro elimina il lavoro, la sua configurazione e tutte le esecuzioni del lavoro associate al lavoro.

Arresto di un lavoro che viene eseguito indefinitamente con la CLI

  • Per eliminare un lavoro specifico eseguito con la CLI, utilizza il comando jobrun delete. Facoltativamente, è possibile utilizzare l'opzione -f per forzare l'eliminazione di un lavoro eseguito senza conferma.

    ibmcloud ce jobrun delete --name myjobrun-daemon -f
    

    Output di esempio

    Deleting job run 'myjobrun-daemon'...
    OK
    
  • Per eliminare un lavoro con la CLI, utilizza il comando job delete. Facoltativamente, è possibile utilizzare l'opzione -f per forzare l'eliminazione di un lavoro senza conferma. Quando si elimina un lavoro, vengono eliminati anche tutti i lavori eseguiti per questo lavoro. Il seguente esempio elimina il lavoro myjob-daemon,

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

    Output di esempio

    Deleting job 'myjob-daemon'...
    OK