Création et exécution d'un travail qui s'exécute indéfiniment
Découvrez comment créer et exécuter une tâche « Code Engine » qui peut s'exécuter indéfiniment sans délai d'expiration.
En règle générale, les travaux sont conçus pour s'exécuter une seule fois et se fermer avec un temps d'exécution maximal.
Toutefois, supposons que vous souhaitiez interroger en permanence un magasin de données tiers. Vous pouvez choisir de créer une application ; cependant, le port app doit rester ouvert pour traiter les demandes HTTP. En revanche, si vous ne souhaitez pas traiter les demandes HTTP, vous pouvez choisir de créer un travail qui s'exécute sans durée d'exécution maximale et sans délai d'attente.
Avec Code Engine, vous pouvez choisir le mode de votre travail. Utilisez le mode task par défaut pour les travaux pour lesquels une durée d'exécution maximale s'applique. Pour ces travaux, les instances ayant échoué sont redémarrées
en fonction du nombre maximal de nouvelles tentatives de travail.
Si vous souhaitez créer un travail qui peut s'exécuter indéfiniment et qui n'a pas de délai d'attente, utilisez le mode daemon pour vos travaux. Avec ce mode, les exécutions du travail n'ont pas de délai d'attente et les instances
ayant échoué sont automatiquement redémarrées indéfiniment.
Lorsque vous utilisez le mode daemon pour exécuter des travaux, si vous souhaitez que Code Engine redémarre automatiquement le travail en cas d'échec, assurez-vous que votre code s'arrête avec un code de sortie différent de zéro.
Si l'image de conteneur associée à votre travail de démon se termine par un code d'exit 0, Code Engine suppose que le travail a été arrêté intentionnellement et qu'il n'est pas redémarré. Toutefois, si le travail échoue pour une
raison inattendue et que l'image de conteneur associée à votre travail de démon se ferme avec un code d'exit différent de zéro, Code Engine redémarre automatiquement le travail de démon. Voir Pourquoi mon travail de démon ne redémarre-t-il pas automatiquement?
Avec « Code Engine », vous ne payez que les ressources que vous utilisez. Lorsque votre travail s'exécute en mode daemon, sachez que le travail est toujours en cours d'exécution jusqu'à ce que vous le supprimiez.
Création et exécution d'un travail qui s'exécute indéfiniment à partir de la console
Cet exemple utilise les exemples disponibles sur IBM Cloud Code Engine; il s'agit plus précisément de l'exemple « helloworld ». Lorsque vous créez
un travail qui fait référence à l'exemple icr.io/codeengine/helloworld et que vous spécifiez également le mode daemon, ce travail s'exécute sans durée d'exécution maximale et les instances ayant échoué sont redémarrées
indéfiniment. Si le mode n'est pas spécifié, par défaut, le travail s'exécute en mode task.
-
Créez votre travail
- Ouvrez la console Code Engine.
- Sélectionnez « Commencer la création ».
- Sélectionnez un projet dans la liste des projets disponibles. Vous pouvez aussi en créer un. Notez que vous devez disposer d'un projet sélectionné pour créer un travail.
- Sélectionnez Travail.
- Entrez un nom pour le travail, par exemple
myjob. - Choisissez le code à exécuter. Vous pouvez créer votre travail à partir d'une image dans un registre public, un registre privé ou dans IBM Cloud Container Registry. Vous pouvez également créer votre travail à partir du référentiel ou du code source local. Pour cet exemple, utilisez l'exemple d'image Code Engine,
icr.io/codeengine/helloworld. - Dans la section Ressources & mise à l'échelle, spécifiez
daemonpour le mode dans les Paramètres de résilience. Lorsque vous spécifiez le modedaemon, les exécutions de travail pour ce travail peuvent s'exécuter indéfiniment et elles ne sont pas hors délai. Il n'y a pas de limite de relance pour ces exécutions de travail. Tout travail exécuté pour ces travaux est automatiquement redémarré sans limite. - Cliquez sur Créer pour créer le travail.
-
Dans la page Travaux, cliquez sur l'onglet Travaux pour afficher la liste des travaux définis. Cliquez sur le nom de votre travail pour ouvrir la configuration.
-
Exécutez le travail.
- Cliquez sur Soumettre un travail pour ouvrir la boîte de dialogue Soumettre un travail. Examinez et modifiez éventuellement les valeurs de configuration par défaut (Instances, UC, Mémoire, Nombre de nouvelles tentatives de travail et Délai d'attente du travail). Pour plus d'informations sur ces options, voir Options de création et d'exécution d'un travail.
- Cliquez sur Soumettre un travail pour exécuter votre travail. Le système affiche le statut des instances de votre travail sur la page des détails du travail. Si l'une des instances de votre travail n'a pas pu s'exécuter, ces instances sont automatiquement relancées indéfiniment.
Pour résoudre les erreurs courantes liées aux index d'exécution des tâches, consultez la section « Comprendre les causes d'échec des index d'exécution des tâches ».
-
(Facultatif) Affichez les journaux de l'exécution de travail. Dans la console, vous pouvez " afficher les journaux des travaux à partir de la console pour l'exécution de vos travaux. Notez dans la sortie du journal de l'exemple
helloworldque la variable d'environnementJOB_MODEaffiche le mode du travail.
Création et exécution d'un travail qui s'exécute indéfiniment avec l'interface de ligne de commande
Avant de commencer
- Configurez votre environnement d'interface de ligne de commande Code Engine.
- Créez et utilisez un projet.
Cet exemple utilise les exemples disponibles sur IBM Cloud Code Engine; il s'agit plus précisément de l'exemple « helloworld ». Lorsque vous créez
un travail qui fait référence à l'exemple icr.io/codeengine/helloworld et que vous spécifiez également --mode daemon, ce travail s'exécute sans durée d'exécution maximale et les instances ayant échoué sont redémarrées
indéfiniment. Si le mode n'est pas spécifié, par défaut, le travail s'exécute en mode task.
-
Créez le travail
myjob-daemon, qui utilise l'exemple d'imageicr.io/codeengine/helloworld. Pour exécuter cet exemple d'image en tant que travail en modedaemon, spécifiez--mode daemon.ibmcloud ce job create --name myjob-daemon --image icr.io/codeengine/helloworld --mode daemonExemple de sortie
Creating job 'myjob-daemon'...Le tableau suivant récapitule les options utilisées avec la commande
job createdans cet exemple. Pour plus d'informations sur la commande et ses options, voir la commandeibmcloud ce job create.Description de la commande Option Description --nameNom du travail. Utilisez un nom unique dans le projet. Cette valeur est requise.
- Le nom doit commencer et se terminer par un caractère alphanumérique en minuscules.
- Le nom doit contenir 63 caractères ou moins et peut contenir des lettres, des nombres et des traits d'union (-).
--imageNom de l'image qui est utilisée pour les exécutions du travail. --modeMode pour les exécutions du travail. Les valeurs valides sont « task» (par défaut) et «daemon». En modedaemon, il n'y a pas de valeur de délai d'attente et les instances ayant échoué sont redémarrées indéfiniment. -
(Facultatif) Utilisez la commande
job getpour afficher des informations sur votre travail.ibmcloud ce job get --name myjob-daemonExemple de sortie
[...] 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 [...] -
Exécutez votre travail. Cet exemple de commande exécute l'exécution de travail
myjobrun-daemonbasée sur la configuration de travailmyjob-daemon.ibmcloud ce jobrun submit --name myjobrun-daemon --job myjob-daemon -
(Facultatif) Affichez les détails de l'exécution de votre travail.
ibmcloud ce jobrun get --name myjobrun-daemonExemple de sortie
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 -
(Facultatif) Affichez les journaux de l'exécution de travail. Avec l'interface de ligne de commande, vous pouvez afficher les journaux de travail pour toutes les instances d'une exécution de travail ou pour une instance d'exécution de travail particulière. L'exemple suivant affiche les journaux de travail pour toutes les instances de l'exécution de travail
myjobrun-daemon.ibmcloud ce jobrun logs --name myjobrun-daemonExemple de sortie
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
Maintenant que votre travail est créé en mode daemon, il s'exécute indéfiniment. Comme il n'y a pas de délai d'attente et que les instances ayant échoué sont redémarrées indéfiniment, les options --maxexecutiontime et --retrylimit ne sont pas autorisées lorsque vous exécutez un travail en mode daemon.
Notez que la variable d'environnement JOB_MODE affiche le mode des exécutions du travail.
Arrêt d'un travail qui s'exécute indéfiniment
Lorsque vous exécutez un travail en mode daemon, il peut s'exécuter indéfiniment, car il s'exécute sans durée d'exécution maximale et toutes les instances ayant échoué sont automatiquement relancées indéfiniment. Pour arrêter un
travail qui est en mode daemon, supprimez l'exécution de travail spécifique ou supprimez le travail.
Arrêt d'un travail qui s'exécute indéfiniment à partir de la console
-
Pour supprimer une exécution de travail spécifique, accédez à la page de travail correspondant à votre travail spécifique. Accédez à l'onglet Exécution de travaux. Supprimez l'exécution de la tâche que vous souhaitez supprimer.
-
Pour supprimer un travail, accédez à la page Travaux et cliquez sur le nom du travail à supprimer. La suppression d'un travail supprime le travail, sa configuration et toute exécution de travail associée au travail.
Arrêt d'un travail qui s'exécute indéfiniment à l'aide de l'interface de ligne de commande
-
Pour supprimer une exécution de travail spécifique à l'aide de l'interface de ligne de commande, utilisez la commande
jobrun delete. Vous pouvez, si vous le souhaitez, utiliser l'option «-f» pour forcer la suppression d'une exécution de tâche sans confirmation.ibmcloud ce jobrun delete --name myjobrun-daemon -fExemple de sortie
Deleting job run 'myjobrun-daemon'... OK -
Pour supprimer un travail à l'aide de l'interface de ligne de commande, utilisez la commande
job delete. Vous pouvez, si vous le souhaitez, utiliser l'option «-f» pour forcer la suppression d'une tâche sans confirmation. Lorsque vous supprimez un travail, tout travail exécuté pour ce travail est également supprimé. L'exemple suivant supprime le travailmyjob-daemon:ibmcloud ce job delete --name myjob-daemon -fExemple de sortie
Deleting job 'myjob-daemon'... OK