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.
-
Crea il tuo lavoro
- Apri la console Code Engine.
- Seleziona " Inizia a creare ".
- Seleziona un progetto dall'elenco dei progetti disponibili. È anche possibile crearne uno nuovo. Per creare un job, è necessario disporre di un progetto selezionato.
- Selezionare Lavoro.
- Inserisci un nome per il processo; ad esempio, “
myjob”. - 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. - Nella sezione Risorse & ridimensionamento, specificare
daemonper 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. - Fare clic su Crea per creare il processo.
-
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.
-
Eseguire il lavoro.
- 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.
- 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 ".
-
(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 ambienteJOB_MODEvisualizza la modalità del job.
Creazione ed esecuzione di un lavoro che viene eseguito indefinitamente con la CLI
Prima di iniziare
- Imposta il tuo ambiente CLICode Engine.
- Creare e utilizzare un progetto.
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.
-
Creare il job
myjob-daemon, che utilizza l'immagine di esempioicr.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 daemonOutput di esempio
Creating job 'myjob-daemon'...La seguente tabella riepiloga le opzioni utilizzate con il comando
job createin questo esempio. Per ulteriori informazioni sul comando e le sue opzioni, consultare il comandoibmcloud ce job create.Descrizione del comando Opzione Descrizione --nameIl 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 (-).
--imageIl nome dell'immagine utilizzata per le esecuzioni del job. --modeLa modalità per le esecuzioni del lavoro. I valori validi sono task(impostazione predefinita) edaemon. In modalitàdaemon, non c'è alcun valore di timeout e le istanze non riuscite vengono riavviate indefinitamente. -
(Facoltativo) Utilizzare il comando
job getper visualizzare le informazioni sul lavoro.ibmcloud ce job get --name myjob-daemonOutput 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 [...] -
Esegui il tuo lavoro. Questo comando di esempio esegue l'esecuzione del lavoro
myjobrun-daemonbasato sulla configurazione del lavoromyjob-daemon.ibmcloud ce jobrun submit --name myjobrun-daemon --job myjob-daemon -
(facoltativo) Visualizzare i dettagli dell'esecuzione del lavoro.
ibmcloud ce jobrun get --name myjobrun-daemonOutput 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 -
(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-daemonOutput 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-fper forzare l'eliminazione di un lavoro eseguito senza conferma.ibmcloud ce jobrun delete --name myjobrun-daemon -fOutput 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-fper 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 lavoromyjob-daemon,ibmcloud ce job delete --name myjob-daemon -fOutput di esempio
Deleting job 'myjob-daemon'... OK